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

时间:2015-02-02 18:46:44

标签: ruby-on-rails devise

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

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

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

1 个答案:

答案 0 :(得分:1)

included在被收录时被激怒。

然而,lambdas每次都会开火。

试试这个:

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