これが私のモデル構造です:
A User has and belongs to many groups
A Group has many subscriptions
A Group has and belongs to many users
A Group has many GroupAdmins
A Subscription belongs to a group
A GroupAdmin belongs to a user
A GroupAdmin belongs to a Group
(アクティブ レコードを使用して) DB にクエリを実行すると、次のようなことができるはずです。
u = User.find 47238
私の User モデルには、サブスクリプションと呼ばれるメソッドがあります。
def subscriptions
self.groups.where(:status => 'active').collect { |group| group.subscriptions.where("subscriptions.status = ? AND subscriptions.expiration_date > ?", 'active', "#{Time.zone.now}").last }.flatten
end
次に、クエリを続行します。
u.subscriptions.first.group.group_admins
上記は、グループのレコードと、最初に照会したユーザー ID を返します。しかし、何らかの理由で、グループ内でこのメソッドを実行すると、false が返されます。
def is_group_admin?(user)
self.group_admins.include? user
end
作業コード:
def is_admin?(user)
self.group_admins.collect { |ga| ga.user }.include? user
end