如果没有current_user,则返回nil

时间:2012-12-04 08:35:22

标签: ruby-on-rails scope pusher

我的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将新数据推送到网站,但如果用户会话到期,那么所有数据都被推送而不是什么......希望这是有道理的:)

3 个答案:

答案 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 => nil1=0的条件或始终为false的条件,以便它不会返回任何行。

(正如你的问题下面的评论中所提到的,范围不应该返回为零,因为它不能被链接。)

答案 2 :(得分:2)

scope :active,  lambda{|user| user ? { :conditions => ["deliverydate = ? and user_id = ?", Date.tomorrow, user.id], :order => 'id DESC'} : nil }