web-dev-qa-db-ja.com

has_many:外部キーでスルー?

私はこれについて複数の質問を読みましたが、自分の状況に有効な答えをまだ見つけていません。

私には3つのモデルがあります:AppsAppsGenresおよびGenres

これらのそれぞれの関連フィールドは次のとおりです。

Apps
application_id

AppsGenres
genre_id
application_id

Genres
genre_id

ここで重要なのは、これらのモデルのidフィールドを使用してnotを使用していることです。

それらに基づいてテーブルを関連付ける必要がありますapplication_idおよびgenre_id 田畑。

ここに私が現在持っているものがありますが、それは私に必要なクエリを私に与えていません:

class Genre < ActiveRecord::Base
  has_many :apps_genres, :primary_key => :application_id, :foreign_key => :application_id
  has_many :apps, :through => :apps_genres
end

class AppsGenre < ActiveRecord::Base
  belongs_to :app, :foreign_key => :application_id
  belongs_to :genre, :foreign_key => :application_id, :primary_key => :application_id
end

class App < ActiveRecord::Base
  has_many :apps_genres, :foreign_key => :application_id, :primary_key => :application_id
  has_many :genres, :through => :apps_genres
end

参考までに、私が最終的に必要とするクエリは次のとおりです。

@apps = Genre.find_by_genre_id(6000).apps

SELECT "apps".* FROM "apps" 
   INNER JOIN "apps_genres" 
      ON "apps"."application_id" = "apps_genres"."application_id" 
   WHERE "apps_genres"."genre_id" = 6000
22
Shpigford

[〜#〜] updated [〜#〜]これを試してください:

class App < ActiveRecord::Base
  has_many :apps_genres, :foreign_key => :application_id
  has_many :genres, :through => :apps_genres
end

class AppsGenre < ActiveRecord::Base
  belongs_to :genre, :foreign_key => :genre_id, :primary_key => :genre_id
  belongs_to :app, :foreign_key => :application_id, :primary_key => :application_id
end

class Genre < ActiveRecord::Base
  has_many :apps_genres, :foreign_key => :genre_id
  has_many :apps, :through => :apps_genres
end

クエリあり:

App.find(1).genres

それは生成します:

SELECT `genres`.* FROM `genres` INNER JOIN `apps_genres` ON `genres`.`genre_id` = `apps_genres`.`genre_id` WHERE `apps_genres`.`application_id` = 1

そしてクエリ:

Genre.find(1).apps

生成する:

SELECT `apps`.* FROM `apps` INNER JOIN `apps_genres` ON `apps`.`application_id` = `apps_genres`.`application_id` WHERE `apps_genres`.`genre_id` = 1
42
Anton Grigoryev