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使う



