Rails 4 / Devise / MongoDB: “Parâmetros não autorizados” usando propriedades personalizadas e parâmetros fortes

Tentando adicionar um atributo personalizado aninhadoPerfil (um documento mongóide), para meu legadoDo utilizador classe. Quando o formulário de registro do Devise é enviado, ele deve criar umDo utilizador e um correspondentePerfil objeto também.

Eu gostaria que o resultado final se parecesse com isso no meu MongoDB:

Do utilizador:

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

Perfil:

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

Infelizmente, estou recebendo isso no meu console sempre que envio meu registro. Ele cria com sucesso um usuário, mas não consegue criar um perfil associado.

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

Eu tenho configuração:

Rails 4.0.0beta1, Ruby 2.0.0-p0Devise (ramificação 'rails4'), Mongoid (do git)Um controlador de registros do Devise customizado para incluir uma definição para parâmetros fortes.

models / 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

models / 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

controllers / users / 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"
              }

Eu já vi essas postagens relacionadas, elas não pareciam ajudar:

Rails 4 Atributos Aninhados Parâmetros Não Permitidoshttps://gist.github.com/kazpsp/3350730

EDITAR:

Parece que o Devise realmente suporta parâmetros fortes em sua ramificação 'rails4' (que deve ser mesclada no master em alguns dias). Olhando através do código, parece que você pode sobrescrever uma função params para cada ação nos controladores de legendas. Para criar novos usuários, suasign_up_params ao invés deresource_params no meu exemplo.

Apesar de mudar este nome para o correto, ainda assim não funcionou ... apenas colocar todos os parâmetros na lista de permissões usando esse estrondo pareceu funcionar:

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

Obviamente, este tipo de derrota o propósito de parâmetros fortes ... então agora a questão é como permitir meus atributos aninhadosprofile_attributes (como visto na minha pergunta original)?

questionAnswers(4)

yourAnswerToTheQuestion