は、私がここで定義されたパターンを使用して、フォームオブジェクトがあります。その例とは異なりhttps://forum.upcase.com/t/form-objects/2267レールフォームオブジェクトでマルチパラメータ属性をサポートする方法は?
class RegistrationForm
include ActiveModel::Model
attr_accessor :first_name, :last_name, :date_of_birth
...
end
を、私の形での基礎となるモデルの一つは、日付フィールドを持っています。その日付フィールドは、単純なフォームによってマルチパラメータ属性として提示されている、そのようにコントローラにを通じて提出されています
"user"=>
{"first_name"=>"Hanna",
"last_name"=>"Macias",
"date_of_birth(1i)"=>"2016",
"date_of_birth(2i)"=>"2",
"date_of_birth(3i)"=>"26",
...
しかし、私は、コントローラ上の#create
アクションでRegistrationForm.new(registration_params)
からunknown attribute 'date_of_birth(1i)' for RegistrationForm.
エラーを取得しています:
def create
@registration = RegistrationForm.new(registration_params)
if @registration.save
redirect_to root_path
else
render 'new'
end
end
private
def registration_params
params.require(:registration).permit!
end
:date_of_birth_1i, :date_of_birth_2i, :date_of_birth_3i
などでさらにattr_accessor
を定義しようとしましたが、これで問題は解決されませんでした。
multiparameter属性を正しく処理するには何が必要ですか?
これは、http://guides.rubyonrails.org/form_helpers.html#nested-formsとこのapiページhttp://edgeapi.rubyonrails.org/classes/ActionController/Parameters.html Iあなたのparamsは 'params.require(:user).permit(:first_name)'のようなものであるべきだと考えてください。この 'post'リクエストで' binding.pry'を設定し、コンソールで 'params hash'をチェックし、' registration_params'メソッドに 'first_name'も含めるように設定する方法があります。おそらく 'params.require(" user ")。permit(" first_name ")'が必要です。これをコンソールでテストし、あなたの入力を取得するかどうかを確認してください –