Rails belongs_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