Rails 3 - 通过关联在has_many上的where子句

suf*_*u90 6 activerecord ruby-on-rails ruby-on-rails-3

嗨,您好,

我对has_many的查询有一点问题:通过关联......

我的设置如下:

PurchaseOrderAddressAssignment:

belongs_to :address

belongs_to :purchase_order
Run Code Online (Sandbox Code Playgroud)

地址:

has_many :purchase_order_address_assignments

has_many :purchase_orders, :through => :purchase_order_address_assignments
Run Code Online (Sandbox Code Playgroud)

采购订单:

has_many :purchase_order_address_assignments

has_many :addresses, :through => :purchase_order_address_assignments
Run Code Online (Sandbox Code Playgroud)

我的where子句:

PurchaseOrder.where("addresses.id = 168 and addresses.id = 169").includes(:addresses)
Run Code Online (Sandbox Code Playgroud)

返回0记录......但应该至少有1 ...

PurchaseOrder.where(:baan_id => "KD0005756").first.address_ids
Run Code Online (Sandbox Code Playgroud)

正在返回[168,169,170,327]

......我觉得我太傻了解决这个小问题: - /

谁能告诉我这里我做错了什么?

谢谢,

迈克尔

Azo*_*olo 10

在这种情况下,我可能会做一个自定义查找器方法.

class PurchaseOrder < ActiveRecordBase
  def self.with_addresses(*args)
    values = args.flatten.uniq

    # Note use :joins instead of :includes if you don't
    # want the addresses data
    includes(:addresses)
    where(:addresses => {:id => values})
    group("purchase_orders.id")
    having("count(ad??dresses.id)=#{values.size}")
  end
end
Run Code Online (Sandbox Code Playgroud)

我很确定这应该有用.

这是一个类似的答案,有助于解释查询.