Ein Benutzer hat languages
, ein Array von Sprachnamen. Ich habe diese Methode:Wie man ein Array innerhalb einer SQL-Abfrage in Ruby einläuft
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
die lang
, eine Anordnung von Sprachnamen nimmt, und gibt die Benutzer, deren languages
enthalten einige Sprache innerhalb lang
. Beispiel: Wenn first_user
languages
["uk", "us"]
und lang
["uk"]
ist, enthält der Rückgabewert der Methode first_user
.
Gibt es eine Möglichkeit, dies zu minimieren und eine SQL-Abfrage auf einfachere Weise zu schreiben?
Bitte zeigen Sie uns die Tabellenstruktur. Ist 'user.languages' nur ein serialisiertes Array-Feld in' users'? – mudasobwa
Wenn 'languages' eine' has_many' Beziehung ist, sollten Sie in der Lage sein, etwas zu tun: 'User.joins (: languages) .where (languages: {name: langs})' – Amadan