Rails created_to и наследование одной таблицы не работают

У меня есть модель Bike и модель 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

Что я делаю неправильно??


comment
у вас есть accepts_nested_attributes_for в вашей модели Bike?   -  person alex.zherdev    schedule 01.10.2010


Ответы (1)


Вы используете вложенные формы, поэтому вложенные параметры должны работать, если вы используете тег accepts_nested_attributes_for (см. railscast 196/197).

belongs_to :frame
accepts_nested_attributes_for :frame
person giraff    schedule 01.10.2010