Политики Pundit с объединениями

У меня есть церкви, в которых используются песни.

С конкретным идентификатором песни я пытаюсь получить самую последнюю дату использования и общее количество использований, ограниченное той церковью, к которой принадлежит пользователь.

@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")

person jcuenod    schedule 17.03.2015    source источник


Ответы (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)

person jcuenod    schedule 19.03.2015