1

メンバーシップ結合テーブルを介してグループのメンバーであるユーザーがいます。その結合テーブルの属性の1つは「管理者」です。グループのメンバービュー内でチェックを実行し、各メンバーをループして、それらが管理者であるかどうかを確認しようとしています。

ビューで私は次のことを試みました:

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
4

2 に答える 2

2

これはこれを行うためのよりクリーンな方法だと思います

class Group < ActiveRecord::Base
  has_many :memberships
  has_many :users, :through => :memberships
  has_many :admins, :through => :memberships, :source => :user,
           :conditions => ['memberships.administrator = ?', true] 
end

これで、group.adminsリストができました

for user in @group.admins
    ...DO STUFF
end
于 2010-02-16T00:40:08.230 に答える
1

これを実現するために関連付けを設定できると思いますが、最も簡単な方法は、ユーザーモデルにメソッドを追加して各ユーザーをチェックできるようにすることだと思います(この方法で、提供したループに収まります)。それが正しくドロップするかどうかはわかりません。いくつかの簡単な変更が必要になる場合がありますが、次のようなものから始めることができます。

ユーザーモデル

def is_administrator_of(group_id)
    Membership.find(:first, :conditions => ['user_id = ? AND group_id = ?', self[:id], group_id]).administrator == 1
end
于 2010-02-16T00:21:03.933 に答える