我试图通过两个字段的组合找到给定模型的所有值。
我有以下型号:
create_table "users", :force => true do |t|
t.string "name"
t.string "url"
t.integer "clicks_given"
t.integer "clicks_received"
t.datetime "created_at"
t.datetime "updated_at"
end
我为模型定义了这个方法:
def credits
credits = self.clicks_given - self.clicks_received
end
我试图找到超过给定学分的所有用户:
@users = User.find(:all, :conditions => { "credits >= ?", -5 })
和
@users = User.find(:all, :conditions => { "clicks_given - clicks_received >= ?", -5 })
失败。找到合适用户的正确声明应该是什么?
答案 0 :(得分:3)
将条件作为数组而不是散列传递:
@users = User.find(:all, :conditions => [ "clicks_given - clicks_received >= ?", -5 ])
第一个版本不起作用,因为“credits”不是数据库列。
编辑:
或者在Rails 3语法中,使用您的订单:
@users = User.where("clicks_given - clicks_received >= ?", 5).order("clicks_given - clicks_received")
答案 1 :(得分:1)
为什么不在这样的条件下直接使用-5:
@users = User.find(:all,
:conditions =>"clicks_given-clicks_received>=-5")
如果你有一个变量代替-5那么你可以这样写:
@users = User.find(:all,
:conditions => ["clicks_given-clicks_received >= ?",-5])