Ruby on Rails,通过两个条件找到

时间:2011-04-30 15:08:43

标签: ruby-on-rails find

我试图通过两个字段的组合找到给定模型的所有值。

我有以下型号:

  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 个答案:

答案 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])