9

私はこれでうまくいくと思ったすべてを試しましたが、何も起きていません。

Rails 3では、車にCDプレーヤーを持っているすべてのユーザーを見つける必要があります。車には1人のユーザーと1つのラジオがあり、ユーザーは1台の車に属し、ラジオには多くの車があります。

ユーザーモデルのスコープを介してこの検索を実行する方法に出くわしました。

class User  
  belongs_to :car

class Car  
  belongs_to radio
  has_one :user, :dependent => destroy

class Radio  
  has_many :cars
4

1 に答える 1

26

私はあなたがこれを意味すると仮定しています:ラジオには多くの車があり、車には1人のユーザーがいるので、車にはradio_id、ユーザーがいます。car_id外部キーを持つテーブルは、常にリレーションシップのbelongs_toの最後にあります。

探している構造を実際に知らなくても、次のようなものが機能するはずです。

scope :with_cd_player, joins(:cars).where('cars.radio_id is not null')

ラジオにカテゴリ列がある場合、次のように機能します。

scope :with_cd_player, joins(:car => :radio).where('cars.radio_id is not null').where("radios.category = 'cd_player'")

Railsバージョン>=4の場合:

scope :with_cd_player, -> { joins(:cars).where.not(cars: { radio_id: nil }) }
于 2012-07-24T02:04:28.570 に答える