Имам модел 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
във вашияBike
модел? - person alex.zherdev   schedule 01.10.2010