簡體   English   中英

如何在Ruby中的SQL查詢中的數組中循環

[英]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查詢?

  1. 選擇所有記錄始終是一種反模式。 一個人應該只選擇感興趣的記錄。 如果編寫查詢僅選擇感興趣的記錄時遇到問題,則應修改數據庫結構。

  2. 以簡單的方式編寫SQL查詢

那比較容易。 對於單個lang要檢查的是:

%q|SELECT * FROM users WHERE languages LIKE "%#{lang}%"|
  1. 即使使用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.

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