我想用activerecord(而不是rails)與一個字段中包含多個關鍵字(所以我必須使用LIKE)做一個查詢,但我不知道在推進將會有多少關鍵字。多個where語句結合OR在Activerecord和紅寶石
我的查詢看起來像這樣,Word是我的模型。
query = ['word1','word2'] #could be more
puts "searching for #{query}"
qwords = Word.none
query.each do |qword|
puts qwords.where("word like ?", "%#{qword}%").to_sql
qwords = qwords.where("word like ?", "%#{qword}%")
end
這沒有什麼,因爲查詢添加爲AND但我需要OR。
searching for ["word1", "word2"]
SELECT "words".* FROM "words" WHERE (word like '%word1%')
SELECT "words".* FROM "words" WHERE (word like '%word1%') AND (word like '%word2%')
#<ActiveRecord::Relation []>
我不能使用Word.where(word: query)
它使用SQL IN關鍵字,因爲只對完全匹配。
是否有解決方案不涉及連接所需的整個SQL?
請原諒我的無知,但'Word.none'是什麼?我以前沒見過。 – Beartech 2015-04-03 15:25:52
你見過這個頁面嗎?看起來像使用.to_sql專門處理一系列術語的方法。 https://coderwall.com/p/dgv7ag/or-queries-with-arrays-as-arguments-in-rails-4它還鏈接回舊的SO問題,指導OP考慮AREL。 – Beartech 2015-04-03 15:32:51
@Beartech:與.all相反,在這裏使用它,這樣我就可以將關係排列在一起,從空的開始,你會輕易地用Arel解決方案以我的代碼爲例作答案嗎? – peter 2015-04-03 15:57:43