簡體   English   中英

使用ActiveRecord使用OR子句進行查詢的“路線”是什么?

[英]What is the “Rails Way” of doing a query with an OR clause using ActiveRecord?

我正在將Rails 3與MySQL數據庫一起使用,並且需要以編程方式創建如下查詢:

select * from table where category_name like '%category_name_1%' 
OR category_name like '%category_name_2%'
(...snip...)
OR category_name like '%category_name_n%'

鑒於表的大小和項目范圍(我認為最多為500行),我覺得使用像思考獅身人面像之類的東西會過分殺了。 我知道我可以通過直接編寫查詢字符串來簡單地做到這一點,但是我想知道是否有ActiveRecord的方式來做到這一點。 官方指南中沒有提到這一點,並且我已經搜索了很長一段時間,只是為了空手而歸:(

另外,是否有理由(也許是Rails的理由?)不包含OR子句?

謝謝!

假設你有一個數組names與類別名稱:

Model.where( names.map{"category_name LIKE ?"}.join(" OR "),
  *names.map{|n| "%#{n}%" } )

您應該先使用Google,已經有了答案。 看看這里 ,然后再這里 ,您會得到像這樣的東西:

accounts = Account.arel_table
Account.where(accounts[:name].matches("%#{user_name}%").or(accounts[:name].matches("%#{user_name2}%")))

如果您查看該指南,則可以輕松地將其示例修改為:

Client.where("orders_count = ? OR locked = ?", params[:orders], false)

Mysql現在具有一個regexp函數,可以稍微整理一下,前提是您的類別名稱中沒有regex元字符:

Table.where "category_name regexp '#{names.join('|')}'"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM