2016-06-10 4 views
0

У меня есть приложение Rails 4.0.13 с помощью Devise 3.5.10. Моя 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 

(я первоначально реализованного это некоторое время назад на 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.

Как я могу разрешить эти параметры?

ответ

1

При указании вложенных параметров часть 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'Oh! Я был так привязан к «0», что я не думал о том, как это должно было бы взаимодействовать с 'has_many'. Спасибо, это прекрасно. – Chowlett

Смежные вопросы