這個工程:軌活動記錄 - 複雜條件子句
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