在我的Activity模型中,我有一个默认范围:
default_scope where(:subject_id => Log.get_subject_id)
问题在于Log.get_subject_id,默认值为0.这是我的日志模型:
@@subject_id = 0
def self.set_subject_id(val)
@@subject_id = val
end
def self.get_subject_id
@@subject_id
end
当我通过控制器中的Log.set_subject_id(10)更改@@ subject_id的值,然后我尝试Activity.all时,它总是给我不好的结果。 SQL:
SELECT "activities".* FROM "activities" WHERE "activities"."subject_id" = 0
哪里有问题?谢谢!
答案 0 :(得分:2)
使用default_scope
的形式,在解析类时将评估您的Log.get_subject_id
调用,因此您实际上是这样说的:
default_scope where(:subject_id => 0)
但是,您可以使用default_scope
的块来延迟对范围的评估,直到您尝试使用它为止,并且可能Log.get_subject_id
会有一个有用的值:
default_scope { where(:subject_id => Log.get_subject_id) }
答案 1 :(得分:1)
由于范围缓存正在发生,请尝试使用lambda:
进行封装default_scope lambda { { :conditions => { :subject_id => Log.get_subject_id } } }