الوصول إلى القيم في has_many: من خلال جدول الانضمام
-
20-09-2019 - |
سؤال
لدي المستخدمون الذين هم أعضاء في المجموعات من خلال جدول انضمام العضوية ، وأحد سمات جدول الانضمام هو "المسؤول". أحاول إجراء فحص داخل عرض عضو المجموعة ، وأمر عبر كل عضو لمعرفة ما إذا كان مسؤولًا.
في العرض ، جربت ما يلي:
for user in @group.users
if user.administrator?
...DO STUFF
end
end
لقد جربت هذا أيضًا في وحدة التحكم:
@administrators = @group.memberships.find(:all, :conditions => ["administrator = 1"])
لكن لا حظ. أي أفكار؟
تحديث - لكل أدناه ، ضع طريقة في نموذج المستخدم:
def is_administrator_of(group_id)
Membership.find(:first, :conditions => ['user_id = ? AND group_id = ? AND administrator = ?', self[:id], group_id, true])
end
المحلول
على الرغم من أنني أعتقد أنه يمكنك إعداد جمعيات لإنجاز هذا ، أعتقد أن أسهل طريقة للقيام بذلك هي إضافة طريقة إلى نموذج المستخدم الخاص بك تتيح لك التحقق من كل مستخدم (بهذه الطريقة ستناسب الحلقة التي قدمتها). لا أعرف ما إذا كانت ستنخفض بشكل صحيح ، فقد تتخذ بعض التغييرات السريعة ولكن يمكنك أن تبدأ بشيء مثل:
نموذج المستخدم
def is_administrator_of(group_id)
Membership.find(:first, :conditions => ['user_id = ? AND group_id = ?', self[:id], group_id]).administrator == 1
end
نصائح أخرى
أعتقد أن هذه ستكون طريقة أنظف للقيام بذلك
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
has_many :admins, :through => :memberships, :source => :user,
:conditions => ['memberships.administrator = ?', true]
end
لديك الآن قائمة.
for user in @group.admins
...DO STUFF
end
لا تنتمي إلى StackOverflow