Railsは_toに属し、単一のテーブル継承は動作しません
質問
私は持っています 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.first
と Component.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
所属していません StackOverflow