الوصول الجمعيات في القضبان
-
20-08-2019 - |
سؤال
هل هناك طريقة يمكنني الحصول على قائمة من النماذج التي نموذج معين ينتمي إليها في القضبان؟
وعلى سبيل المثال:
class Project < ActiveRecord::Base
has_one :status
...
end
class Task < ActiveRecord::Base
has_one :status
...
end
class Status < ActiveRecord::Base
belongs_to :project
belongs_to :task
# this is where I want to be able to pass in an array of the associations' class
# names (to be used for checking input) rather than having to do w%{ project task }
# which leaves it open to failure if I add new associations in future
validates_inclusion_of :status_of, :in => ?
...
end
وهذا الأمل يجعل نوعا من الشعور!
المحلول
وهذا سوف تحصل على تجزئة الأجسام واصفا الجمعيات وغيرها من الامور على Model.reflections
نموذج معين. تريد كل القيم في البعثرة التي هي الطبقات Reflection::AssociationReflection
. هذا الرمز يجب أن تحصل على مجموعة تريد:
association_names = []
Model.reflections.each { |key, value| association_names << key if value.instance_of?(ActiveRecord::Reflection::AssociationReflection) }
نصائح أخرى
ويمكنك استخدام مجموعة واحدة لتحديد الجمعيات واستخدامها في التحقق من صحة مثل:
BELONGS_TO_LIST = w%{ project task }
BELONGS_TO_LIST.each {|b| belongs_to b}
validates_inclusion_of :status_of, :in => BELONGS_TO_LIST
لا تنتمي إلى StackOverflow