0

我有两个模型,CarManufacturer。这些模型非常简单:

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)时,我收到此错误:

无法批量分配受保护的属性:制造商

我试图添加

接受嵌套属性:制造商

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"=>"..."}

谢谢

4

3 回答 3

2

你能通过汽车拯救制造商吗?

添加到汽车模型:

accepts_nested_attributes_for :manufacturer

制造商属性以及其他汽车属性添加到汽车模型中的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散列中发送的所有内容都在制造商模型(:名称,:url 等)中使用attr_accessible 调用列入白名单。

于 2013-03-27T17:22:07.787 回答
0

您需要添加

attr_accessible :manufacturer_id, :car_name, :descr, :manufacturer_attributes

在汽车模型。不要在处理它的汽车控制器中的保存方法中使用@manufacturer。

你应该阅读这篇文章:Active Record 嵌套属性

我希望它有所帮助。

于 2013-03-27T17:20:03.673 回答
0

您的 params[:car] 包含制造商属性.. 试试这个:

@manufacturer = Manufacturer.new(params[:car].delete(:manufacturer)) 
@car = @manufacturer.cars.build(params[:car])

你这样做并没有利用has_many关系。你可以通过这个

于 2013-03-27T18:30:13.170 回答