2017-12-28 40 views
0

Ruby on RailsアプリケーションでDeviseを使用しています。ユーザーが自分のアカウントにサインアップしたり更新したりするときには、AddressInformationを作成/更新する必要があります。Rails 5、ネストされた属性、許容されないパラメータを作成する

class User < ApplicationRecord belongs_to :address_information accepts_nested_attributes_for :address_information, allow_destroy: true [...]

は私の_form.html.hamlは以下のようになります。私は私が手にユーザーを更新しようとすると、次の

class Users::RegistrationsController < Devise::RegistrationsController 
    before_action :configure_sign_up_params, only: [:create] 
    before_action :configure_account_update_params, only: [:update] 

    [...] 

    # If you have extra params to permit, append them to the sanitizer. 
    def configure_account_update_params 
    devise_parameter_sanitizer.permit(:account_update, keys: [ 
     :name, 
     address_information: [ 
     :address, 
     :care_of, 
     :zip_code, 
     :country, 
     :state 
     ] 
    ]) 
    end 

:私はこのような属性を追加しようとしました

= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| 
    = devise_error_messages! 
    .form-group 
    = f.label :name 
    = f.text_field :name 

    = f.fields_for :address_informations, resource.address_information do |address_field| 
    .form-group 
     = address_field.label :address 
     = address_field.text_field :address 
    .form-group 
     = address_field.label :care_of 
     = address_field.text_field :care_of 
    .form-group 
     = address_field.label :zip_code 
     = address_field.text_field :zip_code 
    .form-group 
     = address_field.label :city 
     = address_field.text_field :city 

エラー:

Unpermitted parameter: :address_informations 
(0.2ms) BEGIN 
(0.2ms) ROLLBACK 

私には何が欠けていますか?フォーム定義で

+0

たぶん入力ミスですか?許可されていないパラメータは ':address_informations'ですが、' configure_account_update_params'に ':address_information'を許可しています。 –

+0

@DerekHopper私は 'address_informations:'も使用しようとしましたが、同じ結果が得られます。 – Anders

答えて

2

あなたが期待していることから、リソース名は、複数の

= f.fields_for :address_informations, resource.address_information do |address_field| 

であるあなたがstrong parameters and nested attributesで作業するときに添付しなければならない。また

= f.fields_for :address_information, resource.address_information do |address_field| 

にそれを変更する必要があり:address_information属性属性名の末尾に_attributesの接尾辞 - address_information_attributes

def configure_account_update_params 
    devise_parameter_sanitizer.permit(:account_update, keys: [ 
     :name, 
     address_information_attributes: [ 
     :address, 
     :care_of, 
     :zip_code, 
     :country, 
     :state 
     ] 
    ]) 
    end 
+0

おかげさまで、私の '_form.html.haml'内の' = f.fields_for:address_information、resource.address_information do | address_field | 'に変更したとき、自分のネストされたフィールドはまったく表示されません。 – Anders

+2

この場合、resource.address_informationはnilだったことに気づき、代わりに 'f.fields_for:address_information、resource.address_information? resource.address_information:resource.build_address_information do | address_field | ' – Anders

関連する問題