ruby-on-rails - HABTM rails 关系中的 Pundit 范围

标签 ruby-on-rails ruby ruby-on-rails-4 has-and-belongs-to-many pundit

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

  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

关于ruby-on-rails - HABTM rails 关系中的 Pundit 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29481726/

相关文章:

ruby-on-rails - Rails ActionController::实时连接断开

ruby-on-rails - rspec 测试抛出未初始化的常量 Rails (NameError)

ruby-on-rails - Rails 销毁操作不会删除

ruby-on-rails - 在 simple_form 中显示回形针 content_type 错误

ruby - sinatra中的错误数组

ruby - 如何使用 activerecord-sinatra 向 PostqreSQL 添加行?

ruby - 强参数 : Unpermitted parameters: tags in has_many_through relation

object - 轨道 4 : Correct way to create objects from other model from the controller

html - Bootstrap : How to center image in panel heading?

ruby-on-rails - Snow Leopard 安装 Ruby on Rails(使用 MySQL)