2013-07-10 49 views
0

我在Squeel以下查詢:Squeel通過數組迭代用,或者在塊

languages = where{ (name == 'English') | 
(name == 'Spanish') | 
(name == 'German') | 
(name == 'French') | 
... 
} 

,工作正常,但我wodering如果有通過與這些值的數組迭代做出方式它更容易添加和刪除語言。說我創建並排列:

languages_array = %w[ English Spanish French ... ] 

有沒有什麼辦法可以在Where塊中用Squeel迭代?

我試過了所有我能想到但沒有成功的東西。

謝謝。

回答

3

我認爲這應該工作

where{name.in(languages_array)} 
+0

太好了。我甚至從未想過使用'IN'。真是個傻瓜。謝謝! – kakubei

0

你不需要squeel對於這種類型的查詢:where(name: languages_array)會做你需要的東西 - 它會轉化爲

WHERE name IN ('English', 'Spanish', 'French', ...) 

這可能是你需要什麼。

+0

這是真的,但是當你使用像* squeel *這樣的圖層時,我認爲將它用於一切都是有意義的,否則最終會出現一個有趣的混合查詢。 – tokland

+0

這是真的,我試圖堅持一個或另一個,但它證明是困難的。我甚至不得不寫一些直接的'find_by_sql'可怕的查詢,因爲我發現沒有辦法在Rails中完成它們。 – kakubei