2

我当前的索引操作如下所示:

  def index
    @proposals = current_user.proposals
  end

但我想这样做:

  def index
    @proposals = policy_scope(Proposal)
  end

我在和之间有has_and_belongs_to关系。UserProposal

我开始Pundit在我的应用程序中使用 gem,但我不知道如何定义范围以便为普通用户提供上面显示的行为。

我想做这样的事情:

  class Scope < Scope
    def resolve
      if user.admin?
        scope.all
      else
        user.proposals # HOW DO I DO THIS WITH THE SCOPE?
      end
    end
  end

如何获得user.proposals使用范围变量?我知道,如果我有一个has_manyandbelongs_to关系,我可以做类似的事情:

      else
        scope.where(user_id: user.id) # RIGHT?
      end

但是对于HABTM,我不知道该怎么做。

有什么帮助吗?

4

1 回答 1

6

您可以joins用来获取与用户相关的提案。像这样的东西:

def resolve
  if user.admin?
    scope.all
  else
    scope.joins(:users).where(proposals_users: { user_id: user.id })
  end
end
于 2015-04-07T04:47:43.530 回答