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