我试图将一些代码从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
由于