有联接的权威政策

时间:2015-03-17 15:50:02

标签: ruby-on-rails pundit

我有使用歌曲的教堂。

根据特定的歌曲ID,我正在尝试获取最近的使用日期以及用户所属的任何教会限制的总使用次数。

@usages = Usage.select("MAX(services.date) as date", :song_name, :song_id, "count(song_id) as count_song_id").joins(:service, :song).where(:services => {church_id: current_user.church_id}).group(:song_name, :song_id).order("count_song_id DESC")

上面的代码似乎正在运行,但我现在开始实施Pundit授权并遇到了一些困难。我的范围政策非常简单:

class Scope < Scope
  def resolve
    if user.admin?
      scope.all
    else
      scope.where church_id: current_user.church_id
    end
  end
end

问题是如何在连接中实际使用它。这看起来不对,但我有点不知所措:

@usages = policy_scope Usage.select("MAX(services.date) as date", :song_name, :song_id, "count(song_id) as count_song_id").joins(:service, :song).group(:song_name, :song_id).order("count_song_id DESC")

1 个答案:

答案 0 :(得分:1)

所以最终工作(我认为)是:

@usages = policy_scope(Usage.joins :service)
  .select("MAX(services.date) as date", :song_name, :song_id, "count(song_id) as count_song_id")
  .joins(:service, :song)
  .group(:song_name, :song_id)
  .order("count_song_id DESC")

关键是policy_scope(Usage.joins :service)