Rails 4 / Devise / MongoDB: "Parámetros no permitidos" usando propiedades personalizadas y parámetros fuertes

Tratando de agregar un atributo personalizado anidado,Perfil (Un documento de Mongoid), a mi gusto.Usuario clase. Cuando se envía el formulario de registro de Devise, debe crear tanto unUsuario y un correspondientePerfil objeto también.

Me gustaría que el resultado final se vea algo así en mi MongoDB:

Usuario:

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

Perfil:

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

Desafortunadamente, recibo esto en mi consola cada vez que envío mi registro. Crea con éxito un usuario, pero no logra crear un perfil asociado.

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

He configurado:

Rieles 4.0.0beta1, Ruby 2.0.0-p0Devise (rama 'rails4'), Mongoid (de git)Un controlador personalizado de registros de Devise para agregar una definición de parámetros fuertes.

modelos / usuario.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

modelos / perfil.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

controladores / usuarios / 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

rutas.rb

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

Ya he visto estas publicaciones relacionadas, no parecieron ayudar:

Parámetros anidados de Rails 4 Parámetros no permitidoshttps://gist.github.com/kazpsp/3350730

EDITAR:

Parece que Devise realmente admite parámetros fuertes en su rama 'rails4' (que se supone que se fusionará con el maestro en unos días). Al revisar el código, parece que puede anular una función params para cada acción en los controladores de dispositivos. Para crear nuevos usuarios, sussign_up_params en lugar deresource_params en mi ejemplo

A pesar de cambiar este nombre por el correcto, aún no funcionó ... solo funcionó la lista blanca de todos los parámetros que usan esta explosión:

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

Obviamente, este tipo de derrota al propósito de los parámetros fuertes ... así que ahora la pregunta es cómo permito que mis atributos anidadosprofile_attributes (como se ve en mi pregunta original)?

Respuestas a la pregunta(4)

Su respuesta a la pregunta