我的Rails应用程序中有以下Scope,用于根据Choices
从数据库中获取活动current_user
。这样可以正常工作,但如果没有current_user
,则代码会提取数据库中的Choices
。在这里,我只想让它一无所获。
scope :active, lambda{|user| user ? { :conditions => ["deliverydate = ? and user_id = ?", Date.tomorrow, user.id], :order => 'id DESC'} : {} }
如果没有current_user
?
问题在于我正在使用Pusher将新数据推送到网站,但如果用户会话到期,那么所有数据都被推送而不是什么......希望这是有道理的:)
答案 0 :(得分:4)
由于范围会返回ActiveRecord::Relation
个实例,因此返回空ActiveRecord::Relation
个对象更为正确,如here所述。
所以,你必须添加:none
范围才能解决问题:
scope :none, limit(0)
然后在你的范围内使用它,如:
scope :active, ->(user = nil) { user ? { :conditions => ["deliverydate = ? and user_id = ?", Date.tomorrow, user.id], :order => 'id DESC'} : none }
答案 1 :(得分:2)
这是因为空哈希({}
)没有条件,这基本上意味着返回所有行。
根据您的代码的结构方式,您可以创建类似:id => -1
,:id => nil
或1=0
的条件或始终为false
的条件,以便它不会返回任何行。
(正如你的问题下面的评论中所提到的,范围不应该返回为零,因为它不能被链接。)
答案 2 :(得分:2)
scope :active, lambda{|user| user ? { :conditions => ["deliverydate = ? and user_id = ?", Date.tomorrow, user.id], :order => 'id DESC'} : nil }