我有一個汽車模型和一個品牌模型(每個has_and_belongs_to_many)。我正在努力爲汽車創造一個新品牌。汽車模型接受品牌的嵌套屬性。如何獲取params散列中的數據?
當我嘗試
@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 [:品牌] [:品牌] [:名字]'。現在事實證明,品牌表沒有car_id,因爲它使用連接表連接到汽車。
更改後我仍然得到'Can not mass-assign protected attributes:brands'error – 2013-02-15 15:56:04
Car需要有一個attr_accessible:brand_attributes,因爲該表單助手應該輸出params [:car] [:brand_attributes]成爲提交的一個或多個品牌的散列或陣列。此外,控制器不應該使用brands.build,因爲那是ANAF所做的。該控制器應該只是正常的創建/ update_attrbitues – Cluster 2013-02-15 16:10:16