我有两个模型,Car
和Manufacturer
。这些模型非常简单:
class Car < ActiveRecord::Base
attr_accessible :manufacturer_id, :car_name, :descr, ...
belongs_to :manufacturer
...
end
和
class Manufacturer < ActiveRecord::Base
attr_accessible :name, :url
has_many :cars
...
end
包含输入数据表单的视图(views/cars/_form.html.haml
):
= form_for @car do |f|
.field
= f.label :car_name
= f.text_field :car_name
...
= f.fields_for @manufacturer do |m|
.field
= m.label :name
= m.text_field :name
...
当我发送表格以保存输入的信息时(它转到CarsController
),我收到此错误:
无法批量分配受保护的属性:制造商
我试图添加
accepts_nested_attributes_for:制造商
到Car
模型,但它对我没有帮助......
问题出在哪里?
修改 我如何在控制器中保存数据:
@manufacturer = Manufacturer.new(params[:car][:manufacturer])
@car = @manufacturer.cars.build(params[:car])
EDIT2: 来自日志的数据:
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"4vcF5NV8D91DkxpCsqCzfbf05sOYsm7ssxZvPa3+kXo=",
"car"=>{"car_name"=>"...",
"descr"=>"...",
"categroy_ids"=>["2",
"3",
"4"],
"manufacturer"=>{"name"=>"Company",
"url"=>"..."}},
"commit"=>"Save",
"id"=>"..."}
谢谢
答案 0 :(得分:2)
您可以通过汽车保存制造商吗?
添加到汽车模型:
accepts_nested_attributes_for :manufacturer
将其他Car属性中的 manufacturer_attributes 添加到Car model中的 attr_accessible 调用中:
attr_accessible :manufacturer_attributes, :car_name, :descr, ...
将其保存在您的控制器操作(标准方式)中,如下所示:
def create
@car = Car.new(params[:car])
if @car.save
redirect_to @car
else
render :new
end
end
确保您在 manufacturer_attributes 哈希中发送的所有内容均为白色,并在制造商型号中使用attr_accessible调用(:name,:url等)。
答案 1 :(得分:0)
您需要添加
attr_accessible:manufacturer_id,:car_name,:descr,:manufacturer_attributtes
在汽车模型中。不要在汽车控制器的保存方法中使用@manufacturer来处理它。
您应该阅读:Active Record Nested Attributes
我希望它有所帮助。
答案 2 :(得分:0)
你的参数[:car]包含制造商属性..试试这个:
@manufacturer = Manufacturer.new(params[:car].delete(:manufacturer))
@car = @manufacturer.cars.build(params[:car])
您不是通过这种方式使用has_many
关系。您可以浏览this