0
私はform
を持っています。これは、パラメータをコントローラに渡して、ActiveModel::ForbiddenAttributesError
の原因となります。私のcreate
関数は、これらの配列パラメータを修正し、その部分を文字列に結合する別の関数を呼び出すが、その時点では遅すぎると思う。Rails 4:ハッシュを使用したパラメータ
のparams
{ "remote"=>
{ "name"=>"",
"start_date"=>"9/27/2016",
"email"=>"",
"allergies"=>["Peanuts", "Soy Protein", "Dairy", ""],
}
}
コントローラ
def create
new_params = fix_params(params, ["allergies"])
remote_params = new_params["remote"]
@remote = Remote.new(remote_params)
respond_to do |format|
if @remote.save
format.html { redirect_to root_path, notice: 'Remote was successfully created.' }
format.json { render :show, status: :created, location: @remote }
else
format.html { render :new }
format.json { render json: @remote.errors, status: :unprocessable_entity }
end
end
end
def fix_params(params, fields)
fields.each do |field|
to_change = params[:remote][field]
new_param = to_change.join(", ").strip()
params[:remote][field] = new_param || ""
end
return params
end
たぶん、これらの変数を渡すために良い方法はありますか?
を含めるために、私の強いパラメータを変更しました。あなたもそれを投稿できますか?また、なぜfix_paramsメソッドが必要なのですか?達成しようとしていたのは何ですか?間違いなく、より荒々しい道があります。 – Matt
あなたは正しいです、それはモデルによるもので、私は 'fix_params'でやることとは違ったやり方をしたいと思っています。この関数は基本的にパラメータの配列をとり、それらを文字列に結合します –
あなたのモデルでそれを行うためのより良い方法があります。カスタムアトリビュートを定義するdef allergies =(value)do self [:allergies] = value.is_a?(Array )? value.join( '、').strip:value end。モデルは設定するたびに値を修正します。 – arieljuod