0

私は2つのモデルを持ってい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)、次のエラーが表示されます。

保護された属性を一括割り当てできません: メーカー

私は追加しようとしました

accept_nested_attributes_for :manufacturer

モデルに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

Car モデルのattr_accessible呼び出しに、他の Car 属性の中でmanufacturer_attributesを追加します。

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ハッシュで送信するすべてのものが、製造元モデル (:name、:url など) の attr_accessible 呼び出しでホワイトリストに登録されていることを確認してください。

于 2013-03-27T17:22:07.787 に答える
0

追加する必要があります

attr_accessible :manufacturer_id、:car_name、:descr、:manufacturer_attributes

車内モデル。@manufacturer が処理される車のコントローラーの保存方法で気にしないでください。

これを読む必要があります:Active Record Nested Attributes

お役に立てば幸いです。

于 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 に答える