تنتمي القضبان - وميراث الجدول المفرد لا يتصرف
سؤال
انا املك 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