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
我正在考虑根据状态显示记录。如果您已登录,您可以看到未批准的记录,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