Rails 关注点、范围、设计,User.current 和 current_user

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

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

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 在包含时触发。

但是,lambda 每次都会触发。

试试这个:

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