1

У меня есть модель Bike и модель Component. Несколько моделей наследуют от Component: Frame, Chain, Crankset и т.д.Rails принадлежит_to и однонаправленное наследование таблицы не ведет

Когда я представить мою форму, мой PARAMS выглядеть следующим образом:

"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 

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

+2

У вас есть 'accepts_nested_attributes_for' в вашей модели' Bike'? –

ответ

2

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

belongs_to :frame 
accepts_nested_attributes_for :frame 
+0

Facepalm ... спасибо – nfm