【问题标题】:Pundit Authorize From Another Model权威人士从另一个模型授权
【发布时间】:2017-05-29 22:44:00
【问题描述】:

我需要根据供应商收到的邀请来授权项目。供应商有一个“user_id”字段。

项目.rb

has_many :invites
has_many :suppliers, :through => :invites

project_policy.rb

class ProjectPolicy < ApplicationPolicy
  attr_reader :user, :project

  def initialize(user, project)
    @user = user
    @project = project
  end

  def show?
    ##need help on the next line##
    if project.joins(:invites).joins(:suppliers).pluck("suppliers.user_id") == user.id
      return true
    else
      return false
    end
  end
end

如何根据供应商表中的user_id 仅显示适当的项目?如果这需要在范围内,那么如何检查范围内的suppliers.user_id

【问题讨论】:

  • 对不起。我不明白你的问题。像代码一样工作吗?如果现在。问题是什么。你能告诉我们查询的结果吗
  • 是的,我已经建立了模型关系,但试图弄清楚将什么放入 show? 权威政策,以便它只允许访问有邀请的项目

标签: ruby-on-rails pundit


【解决方案1】:

如何根据供应商表中的user_id 仅显示适当的项目?

The has_many :through Association

Invites.rb
  belongs_to :supplier
  belongs_to :project

项目模型有很多供应商

Project.rb
  has_many :invites
  has_many :suppliers, :through => :invites

供应商模式有很多项目

Supplier.rb
  has_many :invites
  has_many :projects, :through => :invites

找到供应商并使用has_many :projects, :through =&gt; :invites

Supplier.find_by(user_id: user.id).projects

【讨论】:

  • 根据您的提示,使其适用于:Supplier.find_by(user_id:user.id).projects.pluck("projects.id").include? project.idshow? 政策中。你认为这足够干吗?如果是这样,您能否将其包含在您的答案中,我会接受..
  • @HoosierCoder 是的,但如果您需要更多帮助,您可以查看 codereview 堆栈交换论坛
  • @HoosierCoder 非常感谢。祝你的应用好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多