2

has_and_belong_to_many の関係を持つ Restaurant クラスと Category クラスがあります。この関連付けにより、配列を返す restaurant.category_ids メソッドを取得します。

指定したカテゴリ (複数可) に属するレストランを選択したい。このクエリを作成するにはどうすればよいですか?

これまでのところ、私は持っています:

@restaurants = Restaurant.joins(:categories).where('categories.id' =>    params[:category_ids])

しかし、これは、カテゴリの 1 つだけに適合するレストランだけでなく、重複も返します。

たとえば、アメリカ料理、安い料理、ファースト フードのレストランを検索すると、@restaurants に対して ["Mcdonald's", "McDonald's", McDonald's", "Burger King"] が表示されます。

私も試しました:

@restaurants = Restaurant.where(:category_ids => params[:category_ids])

しかし、category_ids はデータベース フィールドではないため、これは機能しません。

注: params[:category_ids] は ID の配列です。

助けてくれてありがとう!

4

1 に答える 1

1

実行可能な唯一の解決策は、次のようなクエリを生成することだと思います

Restaurant.joins(:categories).where('categories.id' => cat_id1).where('categories.id' => cat_id2)...

その場合、最初の場所と2番目の場所と...

追加する必要がある場合にのみレコードを取得するには.distinct

したがって、ソリューション全体は次のようになります(これが有効な構文であるかどうかはわかりません)

query = Restaurant.joins(:categories)
category_ids.each do |category_id|
  query = query.where('categories.id' => category_id)
end
query.distinct
于 2013-07-18T11:47:46.530 に答える