class Transaction < ActiveRecord::Base
  belongs_to :account, :polymorphic => true
end

class Bankaccount < ActiveRecord::Base
  has_many :transactions, :as => :account
end

class Creditcard < ActiveRecord::Base
  has_many :transactions, :as => :account
end

尝试对帐户处于事件状态的交易进行汇总。
Transaction.sum(:all, :conditions => "account.status = 'active'", :include => :account)

因此,经过一番阅读,我发现:
原因是父模型的类型是列值,因此不能将其对应的表名放在该查询的FROM/JOIN子句中。
表格名称是银行帐户和信用卡,这是否意味着它们应该是单数?
另外account_type是Bankaccount或Creditcard的字符串以反射(reflect)模型,但应该改为表名吗?

最佳答案

这里有两个问题:

  • 总结多态关联。
  • 多态关联上的条件。

  • 您实际上不能做任何一件事情。因此,您应该通过执行以下两个查询来获得相同的错误:
  • Transactions.count(:all,:joins =>:account)
  • Transactions.find(:all,:conditions =>“accounts.status ='active'”,:joins =>:account)

  • 要真正获得所需的信息,必须明确列出可能的父多态关联。一种方法是简单地使用SQL和LEFT JOINS,以便可以使用单个查询。使用Rails可以通过两个查询来执行:
    Creditcard.sum(
      :all,
      :select => "transactions.amount",
      :conditions => "creditcards.status = 'active'",
      :joins => :transaction
    ) + Bankaccount.sum(
      :all,
      :select => "transactions.amount",
      :conditions => "bankaccounts.status = 'active'",
      :joins => :transaction
    )
    

    附注:如果您不打算在查询后访问联接的对象,最好使用:join而不是:include。

    10-07 23:00