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 子句中。
表名是bankaccounts 和creditcards,这是否意味着它们应该是单数?
另外,account_type 是一个银行帐户或信用卡的字符串来反映模型,但它应该是表名吗?
这里有两个问题:
- 对多态关联进行总结。
- 多态关联的条件。
实际上你不能做这两件事。因此,执行这两个查询应该会得到相同的错误:
- 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
)
P.S:如果您不打算在查询后访问连接的对象,最好使用 :join 而不是 :include 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)