[英]How to loop in array inside sql query in ruby
用戶具有languages
,這是語言名稱的數組。 我有這種方法:
def get_users_by_filtered_langauges(lang)
users = []
User.all.each do |u|
u.languages.each do |l|
users << u if lang.include?(l)
end
end
這需要lang
,語言名稱的數組,並返回其用戶的languages
包括內的一些語言lang
。 例如,如果first_user
languages
["uk", "us"]
而lang
為["uk"]
,則該方法的返回值包括first_user
。
有沒有一種方法可以使這種情況最小化並以更簡單的方式編寫SQL查詢?
選擇所有記錄始終是一種反模式。 一個人應該只選擇感興趣的記錄。 如果編寫查詢僅選擇感興趣的記錄時遇到問題,則應修改數據庫結構。
以簡單的方式編寫SQL查詢
那比較容易。 對於單個lang
要檢查的是:
%q|SELECT * FROM users WHERE languages LIKE "%#{lang}%"|
all
,您的方法也會濫用each
方法以減少輸入。 在紅寶石中,應寫為:
def get_users_by_filtered_langauges(*langs)
# single lang
# User.all.reject { |u| u.languages.include?(lang) }
# disjunction
User.all.reject { |u| (u.languages & langs).empty? }
end
@mudasobwa的答案是正確的。 但是您也可以這樣做。
User.where("languages like '%?%'", lang)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.