質問

私は持っています Bike モデルとa Component モデル。いくつかのモデルが継承されます Component: Frame, Chain, Crankset

私が自分のフォームを送信するとき、私のパラマは次のように見えます:

"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.firstComponent.all 問題なく。

私は狂っていますか?ネストされたパラメーションは通常の慣習ではありませんか?それが生成されるものです:

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

私は何が間違っているのですか?

役に立ちましたか?

解決

ネストされたフォームを使用しているので、ネストされたパラメーションは、 accepts_nested_attributes_for タグ(参照 Railscast 196/197).

belongs_to :frame
accepts_nested_attributes_for :frame
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top