Ruby on Rails,按两个条件查找

3

我希望通过两个字段的组合来查找给定模型的所有值。

我有以下模型:

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

失败了。应该使用哪个语句来找到正确的用户?

2个回答

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

在这种情况下,Rails指南是您最好的朋友:http://guides.rubyonrails.org/active_record_querying.html :) - Thilo
谢谢,我有时会去那里,但大多数时候我不知道我在找什么,所以最终还是要问。 :) - Tiago Veloso
1
是的,它应该可以,但你不需要将 order 参数作为数组传递。一个简单的字符串就可以了::order => "clicks...." - Thilo
我添加了Rails 3的方法,以防您使用该版本。 - Thilo
我一直对find和where感到困惑。指南上说要用where和order,但我看到的大多数示例都使用find。 - Tiago Veloso
显示剩余2条评论

1
为什么不直接在条件中使用-5,像这样:
 @users = User.find(:all, 
                    :conditions =>"clicks_given-clicks_received>=-5")

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

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

因为在除了示例代码之外的任何地方,-5 很可能会被变量替换。 - Thilo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接