这个工程:轨活动记录 - 复杂条件子句
ids = [1,2]
varietals = Varietal.find(:all, :conditions => [ "id IN (?)",ids])
但我想要做的是,加上有一个条件:删除=>假
varietals = Varietal.find(:all, :conditions =>{ :deleted => false})
什么想法?
我将不得不使用find_by_sql?
这个工程:轨活动记录 - 复杂条件子句
ids = [1,2]
varietals = Varietal.find(:all, :conditions => [ "id IN (?)",ids])
但我想要做的是,加上有一个条件:删除=>假
varietals = Varietal.find(:all, :conditions =>{ :deleted => false})
什么想法?
我将不得不使用find_by_sql?
你可以做一些方法,但是这是最简单的:
varietals = Varietal.find([1,2], :conditions => { :deleted => false })
可以see in the docs说的find
第一个参数可以采取一个整数或数组。
ids = [1,2]
varietals = Varietal.find(:all, :conditions => {:id => ids, :deleted => false})
这应该工作,虽然没有测试过。
从docs:
阵列可在散列被用于 使用SQL IN操作者:
Student.find(:all, :conditions => { :grade => [9,11,12] })
这也可以,但是来自Doug Neiner的更简洁 – 2010-01-10 06:12:07
它对于这种情况可能是更好的选择,但是你应该感谢你现在知道如何在一个散列中组合多个条件!) – user94154 2010-01-10 17:35:12
我是。谢谢:) – 2010-01-10 21:00:40
我将处理这个与named_scope通信意图和培育再利用:
named_scope :undeleted,
:conditions => { :deleted => false }
然后哟你可以简单地使用:
varietals = Varietal.undeleted.find([1,2])
+1的方法和范围 – 2011-04-26 00:40:45
是这种方法SQL注入安全吗?它看起来像AR不会写我准备好的声明,所以不知道AR如何防止sql注入 – 2010-01-10 17:37:26
是的,这个声明是SQL注入安全的。它只允许一个整数或一个整数数组或多或少。只要你按照适当的惯例来调用你的AR发现,你的查询将是安全的。 (即不要做:':conditions =>'deleted =#{@ deleted}''而不是':conditions => {:deleted => @deleted}'或类似的东西 – 2010-01-10 19:27:02