0

これが私のモデル構造です:

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
4

1 に答える 1

1

group_adminsGroupAdmin オブジェクトのコレクションを返します。これらは (user_id を介して) ユーザーに対応している可能性がありますが、実際にはユーザーではないため、group_admins.include?(user)false のみを返すことができます。

何をしているかに応じて、適切な値を持つ GroupAdmin を呼び出したり、検索include?したりできます。group_admins.collect {|ga| ga.user}user_id

于 2012-05-24T22:51:35.850 に答える