Rails 4 / Devise / MongoDB: «недопустимые параметры» с использованием пользовательских свойств и сильных параметров

Пытаясь добавить вложенный пользовательский атрибут,Профиль (Mongoid документ), к моему устройствупользователь класс. Когда форма регистрации Devise представлена, она должна создатьпользователь и соответствующийПрофиль объект также.

Я бы хотел, чтобы конечный результат выглядел примерно так в моем MongoDB:

Пользователь:

{
  # Devise fields:
  "email": "[email protected]",
  ...
  # Custom field
  "profile" : "<object_id>"
}

Профиль:

{
  "first_name": "Dave",
  ....
}

К сожалению, я получаю это в своей консоли всякий раз, когда я отправляю свою регистрацию. Он успешно создает пользователя, но не может создать связанный профиль.

Started POST "/" for 127.0.0.1 at 2013-04-20 23:37:10 -0400
Processing by Users::RegistrationsController#create as HTML
Parameters:
   {"utf8"=>"✓",
   "authenticity_token"=>"awN2GU8EYEfisU0",
   "user"=>
       {"profile_attributes"=>
           {"first_name"=>"Dave",
           "birthday(2i)"=>"4",
           "birthday(3i)"=>"21",
           "birthday(1i)"=>"1933",
           "occupation_title"=>"Software Developer"},
        "password"=>"[FILTERED]",
        "password_confirmation"=>"[FILTERED]",
        "email"=>"[email protected]"}}
Unpermitted parameters: profile_attributes

У меня есть настройки:

Rails 4.0.0beta1, Ruby 2.0.0-p0Devise (ветка 'rails4'), Mongoid (из мерзавца)Пользовательский контроллер регистрации Devise для добавления определения сильных параметров.

модели / user.rb:

class User
  include Mongoid::Document

  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable,
     :token_authenticatable, :confirmable, :lockable, :timeoutable

  field :email,              type: String, default: ''

  ...

  has_one :profile
  accepts_nested_attributes_for :profile
end

модели / profile.rb:

class Profile
  include Mongoid::Document
  include Mongoid::Timestamps

  # Attributes
  # ----------
  field :slug,                type: String, default: '' # Acts as user-'friendlier' slug
  field :birthday,            type: DateTime, default: DateTime.now
  field :first_name,          type: String, default: ''
  field :occupation_title,    type: String, default: ''

  belongs_to :user
  embeds_many :photos
  has_one :occupation_industry, :as => :industry
end

Контроллеры / пользователи / registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController

  def resource_params
    params.require(:user).permit(:email, :password, :password_confirmation, :profile_attributes)
  end
  private :resource_params
end

routes.rb

devise_for  :users,
              :path => '',
              :path_names => {
                :sign_in => 'login',
                :sign_out => 'logout',
                :sign_up => 'register'
                },
              :controllers => {
                :registrations => "users/registrations",
                :passwords => "users/passwords"
              }

Я уже посмотрел на эти связанные посты, они, кажется, не помогают:

Вложенные атрибуты Rails 4: недопустимые параметрыhttps://gist.github.com/kazpsp/3350730

РЕДАКТИРОВАТЬ:

Похоже, что Devise действительно поддерживает сильные параметры в своей ветке 'rails4' (которая должна быть объединена с мастером через несколько дней.) Из кода видно, что вы можете переопределить функцию params для каждого действия на контроллерах devise. Для создания новых пользователей, егоsign_up_params вместоresource_params в моем примере.

Несмотря на то, что это имя было изменено на правильное, оно все равно не работало ... казалось, что работает только белый список всех параметров, использующих этот удар:

def sign_up_params
  params.require(:user).permit!
end

Очевидно, что этот вид побеждает назначение сильных параметров ... поэтому теперь вопрос заключается в том, как разрешить мои вложенные атрибутыprofile_attributes (как видно из моего оригинального вопроса)?

Ответы на вопрос(4)

Ваш ответ на вопрос