Рельсы принадлежат_то и одностороннее наследование, не поведение
Вопрос
у меня есть 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
Что я делаю неправильно??
Решение
Вы используете вложенные формы, настолько вложенные параметры должны работать, если вы используете accepts_nested_attributes_for
Теги (см Railscast 196/197.).
belongs_to :frame
accepts_nested_attributes_for :frame
Не связан с StackOverflow