过滤另一个关联的has_many关联结果?

时间:2013-04-11 23:16:58

标签: ruby-on-rails activerecord

class User < ActiveRecord::Base
  has_many :vehicles
end

class Vehicle < ActiveRecord::Base
  belongs_to :user
  belongs_to :make
end

class Make < ActiveRecord::Base
  has_many :vehicles
end

所以在MakesController#show中,我想要显示该特定品牌的所有current_user车辆。有没有办法在协会上这样做:

current_user.vehicles.find_by_make(@make)

或者我被迫做了类似的事情:

Vehicle.find_by_user_and_make(current_user, @make)

?我知道第一种方法不起作用,但第二种方法感觉有点脏。

编辑: 道歉,我意识到我过分简化了这个问题。我真的很想将Make上定义的类方法/范围应用于关联。调用ActiveRecord::Relation方法(如where)非常简单。动态地举起了这个例子,但是还有很多比我想做的简单的where电话更多的事情,再次道歉。

2 个答案:

答案 0 :(得分:1)

您也可以

current_user.vehicles.find_all_by_make(@make)

答案 1 :(得分:0)

你想要

current_user.vehicles.where(make_id: @make) 

正如@Zippie所指出的