创建比较两个表上的字段的Rails范围

时间:2017-03-21 01:13:03

标签: ruby-on-rails activerecord named-scope

我在应用程序中有许多关联的表

i

我想创建一个范围,用于生成与关联的House的主MLS相关的所有列表。换句话说,范围应该生成所有列表,其中multiple_listing_service_id = primary_mls.id用于关联的房屋。

我已经尝试过几十个嵌套连接范围,似乎没有一个工作。他们最多只返回所有列表,通常都会失败。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,我不确定一个纯粹的范围是什么样的。假设你有:

class MultipleListingService < ActiveRecord::Base
  has_many :listings
  has_many :zip_codes
end

我会选择类似的东西:

class House < ActiveRecord::Base
  ...

  def associated_listings
    primary_mls.listings
  end
end

更新1

如果您的目标只是获取主要商家信息,那么我会向is_primary添加Listing字段。这将是最有效的。另一种选择是3表连接,它可以工作,但很难很好地优化:

class Listing < ActiveRecord::Base
  ...
  scope :primary, -> { joins(:houses => [:zip_codes])
                      .where('zip_codes.multiple_listing_service_id = listings.multiple_listing_service_id') }