と の 2 つのモデルがBannerありBannerTypeます。
それらのスキーマは次のようになります。
バナー
# Table name: banners
#
# id :integer not null, primary key
# name :string(255)
# image :string(255)
# created_at :datetime not null
# updated_at :datetime not null
# url :string(255)
# banner_type_id :integer
バナータイプ
# Table name: banner_types
#
# id :integer not null, primary key
# name :string(255)
# created_at :datetime not null
# updated_at :datetime not null
Banner belongs_to :banner_typeとBannerType has_many :banners
BannerType には次の 2 つのレコードがあります。
BannerType.all
BannerType Load (0.3ms) SELECT "banner_types".* FROM "banner_types"
=> [#<BannerType id: 1, name: "Featured", created_at: "2012-12-17 04:35:24", updated_at: "2012-12-17 04:35:24">, #<BannerType id: 2, name: "Side", created_at: "2012-12-17 04:35:40", updated_at: "2012-12-17 04:35:40">]
そのタイプのすべてのバナーを検索するクエリを実行したい場合は、次のFeaturedようにすることができます。
Banner.joins(:banner_type).where("banner_types.name = ?", 'Featured')
でクエリを実行することもできますが、banner_type_id => 1それはこの特定の質問に密接に関連しています。
その声明を分析すると、私には少し混乱することがいくつかあります。
Banner.join(:banner_type)それがSQLメソッド名でNoMethodError: undefined method 'join' for #<Class:0x007fb6882909f0>あるのにRailsメソッドが呼び出されないのはなぜですか?joinテーブル
Banner.joins(:banner_type)名banner_typeがbanner_types. Banner & BannerType テーブル (Rails の慣例では複数形として示されています) に参加していませんか? これを試してみるBanner.joins(:banner_types)と、次のエラーが表示されます。Banner.joins(:banner_types) ActiveRecord::ConfigurationError: Association named 'banner_types' was not found; perhaps you misspelled it?なぜ
where句が必要であり、必要banner_typesでないのですかbanner_type(つまり、複数形のバージョン - つまり、joinsメソッドで使用される記号ではなくテーブル名ですか?両方の場所でテーブル名を使用するか、両方の場所でシンボル名を使用すると、より直感的になるようです。少なくとも、一貫性を保つためです。アソシエーションを介して動的検索を実行できないのはなぜ
Banner.find_by_banner_type_name("Featured")ですか?
ご意見をお待ちしております。
ありがとう。