访问活动记录查询中的实例方法

时间:2013-08-23 20:58:02

标签: ruby-on-rails ruby

鉴于以下两个模型:

class Wheel
  belongs_to :car

  def self.flat
    where(flat: true)
  end

class Car
  has_many :wheels

  def flats
    self.wheels.flat
  end

  def has_flats?
    flats.count > 0
  end

我需要查询所有带有扁平轮胎的汽车。我想知道为什么这不适用于汽车模型?:

def self.with_flats
  where(:has_flats?)
end

def self.with_flats
  where(:has_flats? == true)
end

这不会返回正确的记录。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

在Car model中定义范围:

class Car
  has_many :wheels

  scope :having_flat_wheels, joins(:wheels).where("wheels.flat=?", true).uniq
  ......
end  

然后让所有汽车都有轮胎:

Car.having_flat_wheels