Rails Concerns,Scopes,Devise,User.current和current_user

我正在考虑根据状态显示记录。 如果您已登录,则可以看到未批准的记录,公众只能查看已批准的记录。

module Approved extend ActiveSupport::Concern included do if User.current && !User.current.nil? scope :approved, -> { where("#{self.table_name}.status_id IN (1,2,3)") } else scope :approved, -> { where("#{self.table_name}.status_id IN (1)") } end end end 

我正在使用Thread来设置当前用户。

 def self.current=(user) Thread.current[:current_user] = user end def self.current Thread.current[:current_user] end 

在application_controller中,我有一个before_action调用set_current_user。

 def set_current_user User.current = current_user end 

当我注销未经批准的记录时,仍会从查询中提取。 它似乎跳过了这个问题。

included火灾。

然而,lambdas每次都会开火。

试试这个:

 included do scope :approved, -> { ids = User.current.present? ? "(1,2,3)" : "(1)" where("#{self.table_name}.status_id IN #{ids}") } end