9

我已经尝试了所有我认为可以解决这个问题的方法,但一无所获。

在 rails 3 中,我需要找到所有车内装有 cd 播放器的用户。一辆车有一个用户和一个收音机,一个用户属于一辆车,一个收音机有很多车。

我对如何通过用户模型中的范围执行此搜索感到困惑。

class User  
  belongs_to :car

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

class Radio  
  has_many :cars
4

1 回答 1

26

我假设您的意思是: Car has radio_id, User has 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 回答