Car モデルと Brand モデルがあります (それぞれ has_and_belongs_to_many)。車の新しいブランドを作ろうとしています。車のモデルは、ブランドのネストされた属性を受け入れます。
やってみると
@car = Car.find(params[:car_id])
@brand = @car.brands.build(params[:brand])
一括割り当てエラーが発生します:
Can't mass-assign protected attributes: brands
ブランド コントローラー:
class BrandsController < ApplicationController
def create
debugger
@car = Car.find(params[:car_id])
@brand= @car.brands.build(params[:brand])
if @brand.save
redirect_to @car
else
#do something
end
end
end
でデバッガーを呼び出す
pp params
ショー:
"brand"=>{"brands"=>{"name"=>"BMW"}},
"commit"=>"Create Brand",
"action"=>"create",
"controller"=>"brands",
"car_id"=>"4"}
ビューは次のようになります。
<%= form_for([@car, @car.brands.build]) do |f| %>
<div class="field">
<%= f.fields_for :brands do |a| %>
<%= a.text_field :name, placeholder: "New Brand" %>
<% end %>
</div>
<p><%= f.submit %></p>
<% end %>
アプリケーションを安全にしたいので、「ブランド」ハッシュ全体を渡すのではなく、ブランド属性を個別に設定したいと考えています (ちなみにこれは機能しません)。ブランド名を取得するにはどうすればよいですか?何かのようなもの
params[:brands].name?
編集:
「params[:brand][:brands][:name]」でブランド名を取得できます。結合テーブルで車に接続されているため、brands テーブルには car_id がないことがわかりました。