ActiveRecord与限制的关联

时间:2011-09-10 01:31:24

标签: ruby-on-rails ruby activerecord associations

司机has_many汽车 Car has_one所有者

我想返回拥有cars_ Owner = 1的汽车的司机 这是捕获。我想返回所有带有汽车的所有司机(拥有owner_id = 1)。如果Car的所有者不是owner_id = 1,我需要有Driver.cars = [](或nil)

问题是当您急切加载对关联的限制时,所有驱动程序都不会返回。

当您使用联接时,Car永远不会作为活动记录加载。

有什么想法?这个问题实际上比你想象的要复杂得多。

我尝试过,加入,所有,首先,找到条件,包括等等,以及它们之间的每个变化。

1 个答案:

答案 0 :(得分:0)

以下是一些建议:您可以将“Driver has_many cars”包装在代码括号中,并将其写成适当的Ruby / Rails类,以便阅读您的问题的人通过查看来理解jsut:

class Driver < ActiveRecord::Base
  has_many :cars
end

class Car < ActiveRecord::Base
  has_one :owner
end

更不用说在帖子中粘贴所有者类也不会有什么坏处。同样Driver.cars表明'汽车'是一种类方法而不是AR协会,这是误导性的。更自然的事情就是定义你这样的汽车方法:

class Car < ActiveRecord::Base
  belongs_to :owner
end

最后,回答你的问题。所有急切加载的怪癖,以及我认为的情况都在这里解释: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html 在“渴望加载协会”标签下。