1

私はBikeモデルとモデルを持っていComponentます。、などからいくつかのモデルが継承されComponentます。FrameChainCrankset

フォームを送信すると、パラメータは次のようになります。

"bike" => { "frame" => { "id" => "4" }, "chain" => { "id" => "19" }, ... }

私のコントローラーでは、次のコードが壊れています。

@bike = Bike.new(params[:bike])
> Frame(#90986230) expected, got HashWithIndifferentAccess(#81888970)

フォームをハックして次のパラメーターを生成すると、機能します。

"bike" => { "frame_id" => "4", "chain_id" => "19" ... }

ここに私のモデルがあります:

class Bike < ActiveRecord::Base
  belongs_to :frame
  belongs_to :chain
  ...
end

class Component < ActiveRecord::Base
  has_many :bikes
end

class Frame < Component
end

単一テーブルの継承が機能しています-問題なく呼び出すことができFrame.firstますComponent.all

私は気が狂っていますか?ネストされたパラメーターは通常の規則ではありませんか? それが次のように生成されます。

- f.fields_for @bike.frame do |frame|
  = frame.hidden_field :id

私は何を間違っていますか??

4

1 に答える 1

2

ネストされたフォームを使用しているため、accepts_nested_attributes_forタグを使用するとネストされたパラメーターが機能するはずです ( railscast 196/197を参照)。

belongs_to :frame
accepts_nested_attributes_for :frame
于 2010-10-01T07:23:18.357 に答える