我有一个Rails 3.2应用程序,我想为一个客户端和一个应用程序使用一个数据库。因此,对于我创建了一个名为account_id
的字段的每个模型,现在我想添加一个全局范围来过滤日志用户account_id
基础中的行(account_id
是一个会话参数)。所以在初始化时我创建了一个文件并放入这些代码
module ActiveRecord
# = Active Record Named \Scopes \
module Scoping
module Default
module ClassMethods
def unscoped #:nodoc:
return (block_given? ? relation.scoping { yield } : relation).where(account_id: Thread.current['account_id'].id)
end
def default_scope(scope = {})
scope = Proc.new if block_given?
if scope.kind_of?(Array) || scope.is_a?(Hash)
scope.merge!({:conditions=>{account_id:Thread.current['account_id'].id}})
end
self.default_scopes = default_scopes + [scope]
end
end
end
end
end
如果我使用用户account_id=2
登录,一切正常,但如果在同一时刻我使用account_id=3
登录了另一台浏览器或计算机...我有很多错误,在日志中,我有看到该应用程序同时使用account_id=2
但也使用account_id=3
。
任何解决方案?我如何重写default_scope(scope = {})
?还有其他想法吗?
答案 0 :(得分:0)
Thread.current[]
data is not unique per request. I used to have the same problem. By that time I had been using this gem https://github.com/steveklabnik/request_store删除课程。希望它能帮助或者至少提供一个想法。
答案 1 :(得分:0)
我看到我可以制作
module ActiveRecord
class Base
def self.build_default_scope #:nodoc:
super
default_scopes.push({:conditions=>{:account_id=>2}})
end
end
end
但我有错误未定义方法`merge'对于#