嵌套omniauth的强参数

问题描述:

我有一个使用Devise 3.5.10的Rails 4.0.13应用程序。我User模型是:omniauthable使用嵌套authenticationshas_many关系,这样用户就可以通过几个供应商Omniauth:嵌套omniauth的强参数

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, :confirmable, 
     :recoverable, :rememberable, :trackable, 
     :omniauthable, :omniauth_providers => Authentication.auth_methods 

    has_many :authentications, dependent: :destroy 
    accepts_nested_attributes_for :authentications 
end 

(本来我实现了这个前段时间on Rails的3.2,所以我不记得确切的我不得不为此做出改变,我不相信这是相关的,但如果有必要,可以尝试查看它)。

这意味着,用户使用Omniauth有一些参数,如邮件:

Parameters: {"utf8"=>"✓", "user"=>{ 
    "authentications_attributes"=> 
    {"0"=>{"provider"=>"open_id", 
     "uid"=>"http://pretend.openid.example.com?id=12345", 
     "nickname"=>"http://pretend.openid.example.com"}}, 
    "name"=>"Person1", 
    "email"=>"[email protected]", "password"=>"[FILTERED]", 
    "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"} 

我无法弄清楚如何获得强大的参数允许此。我目前的尝试是params.require(:user).permit(:name, :email, :password, :password_confirmation, authentications_attributes: {"0" => [:provider, :uid, :nickname]}),但仍产生日志Unpermitted parameters: provider, uid, nickname

我该如何允许这些参数?

指定嵌套参数时,XYZ_attributes部分接受一个数组,而不是一个散列。

在你的情况下,尝试

authentications_attributes: [:provider, :uid, :nickname]

params.require(:user).permit(:name, :email, :password, :password_confirmation, authentications_attributes: [:provider, :uid, :nickname]) 

来源:https://github.com/rails/strong_parameters#nested-parameters

+0

D'哦!我非常关注“0”,我没有想到这将不得不与'has_many'进行交互。谢谢,那很完美。 – Chowlett