0

users私は多くのアプリを作成しましたareas(経由subscriptions)。一部のユーザーusersには:admin役割があり、これらのユーザーにも多くの役割がありますadministrative_areas(. を介して) administrations。エリア A の管理者がユーザーのインデックス ページにアクセスすると、エリア A の他のユーザーのみが表示されるようにするための最善の方法を理解するのに苦労しています。私のモデルは次のように設定されています。

class User < ActiveRecord::Base
  has_many :subscriptions
  has_many :areas, through: :subscriptions

  has_many :administrations
  has_many :administrative_areas, through: :administrations, :source => :area, :class_name => "Area"
end

class Area < ActiveRecord::Base      
  has_many :subscriptions
  has_many :users, :through => :subscriptions

  has_many :administrations
  has_many :admins, :through => :administrations, :class_name => "User", :source => :user
end

ユーザー/管理者を正常にセットアップできますが、適切な ActiveRecord クエリを取得して、管理者に関連するユーザーのみを返すのに苦労しています。

これを解決するための考え、またはより良いアプローチの提案はありますか?

ありがとう!

4

1 に答える 1

0

@admin_user管理者ロールを持つユーザーを想定しています。

  @admin_areas = User.joins(:subscriptions).where('subscriptions.area_id' => @admin_user.administrative_areas.map(&:id))

cancan gem をロールに使用manageして、さまざまなロールに制御を与えることができます。

編集:以下のようなものを試すことができます

user.rb 内

scope :users_to_manage, lambda{ joins(:subscriptions).where('subscriptions.area_id' => current_user.administrative_areas.map(&:id)) #if you have access current_user in model

能力.rbで

can :manage, Area.users_to_manage
于 2013-02-24T19:47:28.123 に答える