web-dev-qa-db-ja.com

activerecordは配列に含まれていないすべてを見つけます

コードの別の部分からのチーム名の配列があり、その配列にないすべてのチームを検索したい。私は以下を試しましたが、うまくいきません。

@team_exclude_list = ['Team 1', 'Team 2', 'Team 3']
@teams = Team.where("name != ?", @team_exclude_list)

これはRails 3であり、Googleは私にあまり愛情を与えていません。

38
kjs3

文字列フィールドでこれを行ったことはありませんが、おそらくこれでうまくいくでしょう:

@teams = Team.where("name NOT IN (?)", @team_exclude_list)
64
Stéphan Kochen

Rails 4ソリューション:

@team_exclude_list = ['Team 1', 'Team 2', 'Team 3']
@teams = Team.where.not(name: @team_exclude_list)

また、クエリを高速化するには、次の方法があります。

  • 名前にインデックスを作成する

OR

  • デフォルトでインデックスが付けられているIDを使用するようにクエリを変更する
67
nslocum