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)模型,但应该改为表名吗?
最佳答案
这里有两个问题:
您实际上不能做任何一件事情。因此,您应该通过执行以下两个查询来获得相同的错误:
要真正获得所需的信息,必须明确列出可能的父多态关联。一种方法是简单地使用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。