باستخدام الحقول من نموذج جمعية (HAS_MANY) مع formtastic في القضبان

StackOverflow https://stackoverflow.com/questions/2195534

سؤال

لقد بحثت وحاولت الكثير ، لكن لا يمكنني إنجازه كما أريد .. لذا هذه مشكلتي.

class Moving < ActiveRecord::Base
  has_many :movingresources, :dependent => :destroy
  has_many :resources, :through => :movingresources
end

class Movingresource < ActiveRecord::Base
  belongs_to :moving
  belongs_to :resource
end

class Resource < ActiveRecord::Base
  has_many :movingresources
  has_many :movings, :through => :movingresources
end

Movingresources يحتوي على حقول إضافية ، مثل quantity. نحن نعمل على وجهات نظر "بيل". بفضل Formtastic لتبسيط كل شيء العلاقة من خلال الكتابة فقط

<%= form.input :workers, :as => :check_boxes %>

وأحصل على قائمة مربعات اختيار حقيقية. لكن ما لم أكن قد اكتشفته حتى الآن هو: كيف يمكنني استخدام الحقول الإضافية من "MovingResource" ، التالي أو تحت كل مربع اختيار في الحقول المطلوبة من هذا النموذج؟

لقد رأيت طرقًا مختلفة ، وخاصةً مع حلق يدويًا من خلال مجموعة من الكائنات وإنشاء النماذج المناسبة ، باستخدام: في جزء. لكن لم يكن أي من هذه الحلول نظيفة (على سبيل المثال ، عملت في عرض التحرير ولكن ليس للجدد لأن الكائنات المطلوبة لم يتم بناؤها أو توليدها وتوليدها تسببت في فوضى).

أريد أن أعرف حلولك لهذا!

هل كانت مفيدة؟

المحلول

حسنًا ، فاتني ثورة قبول_nted_attributes_for ، وهذا ما يفسر سبب عدم عمله حقًا.

هذا جعلني خطوة كبيرة إلى الأمام ، لكنني أعتقد أنه في مكان ما سأظل لدي بعض المضاعفات مع علاقاتي المعقدة ^_ ^

class Moving < ActiveRecord::Base
    has_many :movingworkers, :dependent => :destroy
    has_many :workers, :through => :movingworkers
    accepts_nested_attributes_for :movingworkers
end


<% form.inputs :for => :movingworkers do |movingworker| %>
    <%= movingworker.inputs :worker, :quantity %>
<% end %>

نصائح أخرى

FormTastic's: قد يساعد خيار label_method. على سبيل المثال

<%= form.input :movingworkers, :label_method => :worker %>

أو

<%= form.input :movingworkers, :label_method => Proc.new { |x| "#{x.worker} #{x.quantity}" } %>

إذا لم تكن الحقول موجودة في العرض الجديد ، فيمكنك فقط اختبار ما إذا كان جديدًا (رقم قياسي جديد؟) وتقديم مجموعة مختلفة من الحقول (إذا كنت تلتف في جزء في يمكن أن يكون نهجا نظيفا).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top