HABTM rails 关系中的 Pundit 范围

Pundit scope in HABTM rails relation

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

  def index
    @proposals = current_user.proposals
  end

但我想这样做:

  def index
    @proposals = policy_scope(Proposal)
  end

我在 UserProposal 之间有一个 has_and_belongs_to 关系。

我开始在我的应用程序中使用 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_manybelongs_to 关系,我可以做类似的事情:

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

但是在 HABTM 的情况下,我不知道该怎么做。

有什么帮助吗?

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

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