سؤال

انا املك 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top