1

假设我有 2 个表asbs与连接表存在多对多关系。连接表有一个属性cond

记录如下:

作为:

id
1

绝对:

id  a_id  b_id  cond
1   1     1     1
2   1     1     0

乙:

id
1

现在我这样做:

b = A.find(1).bs.where(:abs => {:cond => 1}).includes(:abs).first

这给了我我的b实例,问题是,为什么b.abs返回所有 abs行?

我认为include方法是为了避免在后续调用关联方法时重新加载关联。由于我在第一次调用中使用了where我希望b.abs只返回带有cond == 1的行。

我在 rails 控制台中尝试了这个,当我执行b.abs调用时没有发出 SQL 请求。这里发生了什么?有没有办法做我想做的事情,或者我需要再次将条件放在b.abs上,例如 *b.abs.where(:abs => {:cond => 1}) ?

根据评论中的要求,以下是模型的代码:

猫应用程序/模型/a.rb

class A < ActiveRecord::Base
    has_many :bs, :through => :abs
    has_many :abs   
end

猫应用程序/模型/b.rb

class B < ActiveRecord::Base
    has_many :as, :through => :abs
    has_many :abs 
end

猫应用程序/模型/ab.rb

class Ab < ActiveRecord::Base
    attr_accessible :cond, :a_id, :b_id
    belongs_to :a
    belongs_to :b
end
4

0 回答 0