我有一个汽车模型和一个品牌模型(每个都有_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,因为它通过连接表连接到汽车。