有沒有辦法讓ActiveRecord寫'WHERE(a,b )在((1,2),(3,4))'中使用AR發現者。有沒有辦法使用AR發現者在ActiveRecord中寫'WHERE(a,b)in((1,2),(3,4))'
我想
Widget.find(:all, :conditions => ['(a,b) in (?)', [[1,2][3,4]]])
但內部數組轉換爲:YAML?!?!現在我正在使用find_by_sql。有沒有更好的方法來寫這個?
有沒有辦法讓ActiveRecord寫'WHERE(a,b )在((1,2),(3,4))'中使用AR發現者。有沒有辦法使用AR發現者在ActiveRecord中寫'WHERE(a,b)in((1,2),(3,4))'
我想
Widget.find(:all, :conditions => ['(a,b) in (?)', [[1,2][3,4]]])
但內部數組轉換爲:YAML?!?!現在我正在使用find_by_sql。有沒有更好的方法來寫這個?
根據你需要這個如何動態是,你總是可以做一個字符串,像這樣:
Widget.all(:conditions => ["(a,b) in ((1,2), (3,4))"])
這至少可以節省你做的find_by_sql
電話。你也可以使用OR運算符來分割兩個數組嗎?但如果你有一個變量值的數量,這不是理想的
Widget.all(:conditions => ["(a,b) in ((?),(?))", [1,2], [3,4]])
:
你可以做到這一點。聽起來這是一個補丁到ActiveRecord的好機會!
更新:一個可變數量值的kludge。仍然比find_by_sql更好......但你說得對,它本來應該由AR支持。
values = [[1,2],[3,4]]
Widget.all(:conditions => ["(a,b) in (#{Array.new(values.length,'(?)').join(',')})", *values])
是。我有一個可變數量的參數,所以我有一個map/sanitize/join sql writer。它的工作原理,但我同意這是框架應該做的事情。 – 2010-02-06 19:29:12