假设我有 2 个表as和bs与连接表存在多对多关系。连接表有一个属性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