web-dev-qa-db-ja.com

Rails 2つのテーブルのwhere句

Railsアプリケーションに次のモデルがあります

category => company => store

ストアにはbelongs_to会社と会社にはbelongs_toカテゴリの関係。ここで、ストアオブジェクトのwhereメソッドを使用して、同じカテゴリ内のすべてのストアを取得したいと思います。

こんなものが欲しいのですが

@stores.nearbys(5).where("stores.company.category_id = xxx")

誰かが私にこれについてのヒントを与えることができます

11
Martin

結合されたテーブルのどこで結合してみてください:

@stores.nearbys(5).joins(:company).where("companies.category_id = xxx")

編集:

ストアのカテゴリを取得するには、最初にカテゴリメソッドをその会社に委任する必要があります。

class Store < ActiveRecord::Base
 belongs_to :company

 delegate :category, :to => :company
end

次に、クエリでメソッドを呼び出すだけです。

@stores.nearbys(5).joins(:company).where("companies.category_id = ?", self.company.id)
22
Erez Rabih

whereはネストされたハッシュをサポートします。

@stores.nearbys(5).where(:company => { :category_id => @category.id }, joins: company)
13
Simone Carletti