我想知道最好的做法是通过整个数据库处理具有不同活动记录集的团队。
可以说我们有一个供不同团队使用的应用程序。每个团队都可以访问属于他们的所有活动记录,但不能访问属于另一个团队的活动记录。
原始方式是
我想知道是否有更好的方法。例如,在模型中,添加带有after_initialization的team_id。 是否可以为每个查询自动添加team_id = current_user.team_id?处理该问题的最佳方法是什么?有宝石吗?
答案 0 :(得分:0)
“我认为,“每个团队都可以访问属于他们的所有活动记录”。所有记录应属于一个团队。 Pundit旨在构建有关操作(具有或不具有角色)的策略,您需要团队ID才能知道记录的来源,因此Pundit并不是您的最佳选择。这就是我要做的
class Team < ApplicationRecord
has_many :users
has_many :notes
end
class Note < ApplicationRecord
belongs_to :team
end
class User < ApplicationRecord
belongs_to :team
end
登录后,您将拥有current_user,因此您也将拥有团队
class ApplicationController < ActionController::Base
def current_user
return unless session[:user_id]
@current_user ||= User.find(session[:user_id])
end
def current_team
return unless current_user
@current_team ||= current_user.team
end
end
然后您可以链接关联(或使用委托)来获取记录
class NotesController < ApplicationController
def index
@notes = current_user.team.notes
end
end
或
class NotesController < ApplicationController
def index
@notes = current_team.notes
end
end
希望对您有帮助。