ActiveRecord / Arel:如何查询自联接表(来自has_many关系)?

时间:2014-12-09 16:49:27

标签: ruby-on-rails activerecord ruby-on-rails-3.2 arel squeel

我试图将一些代码从Squeel转换为ActiveRecord / Arel。模型看起来像这样:

class Contract < ActiveRecord::Base
  belongs_to :institution
  belongs_to :issuer

  has_many :related_contracts, :through => :issuer, :source => :contracts
end

class Institution < ActiveRecord:Base
  has_one :contract, :dependent => :destroy
end

class Issuer < ActiveRecord:Base
  has_many :contracts, :dependent => :destroy
end

我试图在合同中重写的代码:

def self.foo
  joins {[institution, issuer.institution]}
  .where { |db| db.last_date >= db.related_contracts.last_date }
end

我可以分别使用ActiveRecord和Arel转换where查询中的joins>=运算符。但是,我不知道如何使用两种语法中的任何一种来引用db.related_contracts的等价物(因为我不能在RelatedContract上调用arel_table,因为它不是类)。

编辑: 这是我到目前为止最接近的:

  def self.foo
    fc = Contract.arel_table
    rc = Arel::Table.new(:related_contracts)
    joins(:institution, :related_contracts => :institution)
    .where(fc[:last_date].gteq(rc[:last_date]))
  end

但where条件是使用[related_contracts].[last_date]而不是[related_contracts_contracts].[last_date]

有没有人有任何想法?我真的不想求助于编写原始SQL字符串。我认为这些是相关的: How to get the arel table of a habtm association? Convert ActiveRecord habtm query to Arel

使用Rails 3.2.12

由于

0 个答案:

没有答案