2011-04-30 53 views
3

我试图通过两个字段的组合来查找给定模型的所有值。Ruby on Rails,通过两个条件查找

我有以下型号:

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 }) 

失败。应该找到正确的用户的正确声明是什么?

回答

3

传递的条件为阵列的代替哈希:

@users = User.find(:all, :conditions => [ "clicks_given - clicks_received >= ?", -5 ]) 

第一个版本将不会工作,因为“信用”是不是数据库的列。

编辑:

或在Rails 3的语法,您的订单:

@users = User.where("clicks_given - clicks_received >= ?", 5).order("clicks_given - clicks_received") 
+0

谢谢,对于RoR我还是很新的,但我并没有意识到[]阵列和{}之间的区别。谢谢 – 2011-04-30 15:24:15

+0

在这种情况下,Rails指南是你最好的朋友:http://guides.rubyonrails.org/active_record_querying.html :) – Thilo 2011-04-30 15:27:14

+0

谢谢你,我去那里多次,但大多数时候我不知道我是什么米寻找,所以我最终问。 :) – 2011-04-30 15:31:50

1

为什么不直接使用-5状况是这样的:

@users = User.find(:all, 
        :conditions =>"clicks_given-clicks_received>=-5") 

,如果你有一个变量代替-5,那么你可以写这样的事情:

@users = User.find(:all, 
        :conditions => ["clicks_given-clicks_received >= ?",-5]) 
+0

因为很可能-5将被替换为除了示例代码之外的任何变量。 – Thilo 2011-04-30 15:16:22