rails active record - 复杂条件条款

时间:2010-01-10 02:24:26

标签: ruby-on-rails activerecord

这有效:

ids = [1,2]
varietals = Varietal.find(:all, :conditions => [ "id IN (?)",ids])

但我想做的是加上条件为:deleted =>假

varietals = Varietal.find(:all, :conditions =>{ :deleted => false})

任何想法?

我将不得不使用find_by_sql?

3 个答案:

答案 0 :(得分:5)

我会用named_scope处理这个问题,以传达意图并促进重复使用:

named_scope :undeleted,
            :conditions => { :deleted => false }

然后你可以简单地使用:

varietals = Varietal.undeleted.find([1,2])

答案 1 :(得分:3)

你可以通过几种方式实现,但这是最直接的方式:

varietals = Varietal.find( [1,2], :conditions => { :deleted => false })

您可see in the docs find的第一个参数可以取整数或数组。

答案 2 :(得分:2)

ids = [1,2]
varietals = Varietal.find(:all, :conditions => {:id => ids, :deleted => false})

这应该有效,但尚未测试过。

来自docs

  

可以在哈希中使用数组   使用SQL IN运算符:

Student.find(:all, :conditions => { :grade => [9,11,12] })