HABTM轨道关系中的Pundit范围

Mar*_*rio 2 ruby ruby-on-rails has-and-belongs-to-many ruby-on-rails-4 pundit

我当前的Index操作如下所示:

  def index
    @proposals = current_user.proposals
  end
Run Code Online (Sandbox Code Playgroud)

但我想这样做:

  def index
    @proposals = policy_scope(Proposal)
  end
Run Code Online (Sandbox Code Playgroud)

我和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
Run Code Online (Sandbox Code Playgroud)

如何user.proposals使用范围变量?我知道,如果我有一个has_manybelongs_to关系,我可以这样做:

      else
        scope.where(user_id: user.id) # RIGHT?
      end
Run Code Online (Sandbox Code Playgroud)

但就HABTM而言,我不知道该怎么做.

有帮助吗?

Ale*_*gin 6

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

def resolve
  if user.admin?
    scope.all
  else
    scope.joins(:users).where(proposals_users: { user_id: user.id })
  end
end
Run Code Online (Sandbox Code Playgroud)