1

Проблема выглядит просто, подталкивает меня к стенам и стоила мне недель производства, и я не вижу, чтобы эта проблема исчезла в ближайшее время, так как она всплывает абсолютно везде, где вложенные атрибуты входят.Rails 4 Device 3.2 регистрация с пользовательскими атрибутами UnknownAttributeError

Started POST "/users" for 127.0.0.1 at 2013-11-12 04:56:03 +0100 
Processing by Devise::RegistrationsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"afucNMlRRQkgBeKVVwOQxvjtMtvCDPiQLilr7TXXnUg=", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "first_name"=>"test7", "last_name"=>"test7", "preferred_language"=>"en", **"master_data_contact_information"=>**{"contact_email"=>"[email protected]", "primary_phone_number"=>"23452352345234", "secondary_phone_number"=>"324523453245", "fax_number"=>"23452345234"}, "group_token"=>""}, "commit"=>"Register"} 
Completed 500 Internal Server Error in 96ms 

ActiveRecord::UnknownAttributeError (unknown attribute: master_data_contact_information): 

Как это может быть неизвестно? это правильно.

def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:email) } 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, 
    :password_confirmation, :first_name, 
    :last_name, :preferred_language, 
    :group_token, 
    :master_data_contact_information => 
    [:contact_email, :primary_phone_number, :secondary_phone_number, :fax_number ] 
) } 
end 

если я изменить его к этому:

def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:email) } 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, 
    :password_confirmation, :first_name, 
    :last_name, :preferred_language, 
    :group_token 
) } 
end 

Я получаю

Unpermitted parameters: master_data_contact_information 

так, что сделка с вложенными ресурсами и сильными параметрами?


При запуске на консоли RubyMine он отлично работает.

params = ActionController::Parameters.new user: {"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", 
               "first_name"=>"testqr", "last_name"=>"nsdfjkhasdfjk", "preferred_language"=>"en", "group_token"=>"", 
               "master_data_contact_information"=> 
                {"contact_email"=>"[email protected]", "primary_phone_number"=>"786789678678", 
                 "secondary_phone_number"=>"56675675876567", "fax_number"=>"2456246"}} 



p = params.require(:user).permit(:email, :password, :password_confirmation, :first_name, 
           :last_name, :preferred_language, :group_token, 
           :master_data_contact_information => [:contact_email, :primary_phone_number, :secondary_phone_number, :fax_number ] 
) 

все блестящее.


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

Хорошо работает на простых моделях, да.

Когда все начинает немного усложняться, все адские промахи теряются.

ответ

0

Попробуйте изменить :master_data_contact_information к :master_data_contact_information_attributes

Так у вас есть что-то вроде этого:

def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:email) } 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, 
    :password_confirmation, :first_name, 
    :last_name, :preferred_language, 
    :group_token, 
    :master_data_contact_information_attributes => 
    [:contact_email, :primary_phone_number, :secondary_phone_number, :fax_number ] 
) } 
end 
Смежные вопросы