gpt4 book ai didi

mysql - Pundit 通过连接表确定模型所有权范围 - Rails 4

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:39 25 4
gpt4 key购买 nike

我通过连接表将用户与给定公司相关联,因为我需要能够让每个公司都有大量用户,反之亦然。

class User
has_many :firm_connections, dependent: :destroy
has_many :firms, through: :firm_connections
end

class FirmConnection
belongs_to :user
belongs_to :firm
end

class Firm
has_many :firm_connections
has_many :users, through: :firm_connections
end

我的问题是,当用户点击公司的索引页面时,我如何将其范围限定为仅显示与这些用户关联的内容?

class FirmPolicy < ApplicationPolicy
class Scope < Scope
def resolve
if user.admin?
scope.all
else
scope.where #only the firms associated with that user
end
end
end

我是否需要在接受@user 的公司级别创建一个范围?或者我可以直接内联完成这一切吗?我可以一起破解一些东西,但还没有完全了解专家,所以任何方向将不胜感激!

像这样:

def self.associated_with(user)
all.select { |m| m.users.include?(user) }
end

最佳答案

这应该适合你

class Firm
def index
@firms = policy_scope(Firm)
end
end

class FirmPolicy < ApplicationPolicy
class Scope < Scope
def resolve
if user.admin?
scope.all
else
user.firms #only the firms associated with that user
end
end
end
end

策略并不总是必须按照您的想法来调用它,它只需要返回一些东西(对于范围,几乎总是一个 ActiveRecord::Relation,对于常规、true 或 false)。你可以做

scope.includes(:firm_connections).where(firm_connections: { user_id: user.id })

但这不是可读的(IMO)。

关于mysql - Pundit 通过连接表确定模型所有权范围 - Rails 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26283250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com