سؤال

لدي المستخدمون الذين هم أعضاء في المجموعات من خلال جدول انضمام العضوية ، وأحد سمات جدول الانضمام هو "المسؤول". أحاول إجراء فحص داخل عرض عضو المجموعة ، وأمر عبر كل عضو لمعرفة ما إذا كان مسؤولًا.

في العرض ، جربت ما يلي:

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