form_forとrequireメソッドとmerge
form_forとrequireメソッドとmerge
form_forに入力されたデータはparamsの中に以下のような形でコントローラーに送られます。
【例】
new.html.erb
<%= form_for(@book) do |f| %> <%= f.text_field :name %> <%= f.text_area :detail %> <% end %>
ターミナル
params
# { book: { name: "入力された名前", detail: "入力された詳細" } }
キーはform_forの引数にあるインスタンスの モデル名(book) になり、バリューはカラム名と入力された値のハッシュです。
paramsからキーがbookのバリューを取得し、createアクションの引数に渡せるようにストロングパラメーターを定義するには以下のようにします。
form_forから送られてきたparamsでレコードを作る
reviews_controller.rb
class ReviewsController < RankingController
def new
@product = Product.find(params[:product_id])
@review = Review.new
end
def create
Review.create(create_params)
redirect_to controller: :products, action: :index
end
private
def create_params
params.require(:review).permit(:nickname, :rate, :review).merge(product_id: params[:product_id])
end
end
ターミナル
これを受け取る
> params
=> {"utf8"=>"✓",
"authenticity_token"=>"pLmSAaYFwhtDzN/VO5yh3QTe1eM5cOT1H9yJ/EZf6Ho=",
"review"=>{"nickname"=>"jack", "rate"=>"10", "review"=>"面白い"},
"action"=>"create",
"controller"=>"reviews",
"product_id"=>"1"}
product_idはform_forの”review”で送られてないからmerge使う



