bor*_*con 11 activerecord ruby-on-rails polymorphic-associations
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
Run Code Online (Sandbox Code Playgroud)
尝试对帐户处于活动状态的交易进行总结.
Transaction.sum(:all, :conditions => "account.status = 'active'", :include => :account)
Run Code Online (Sandbox Code Playgroud)
所以经过一些阅读后我发现了这个:原因是父模型的类型是一个列值,因此它的相应表名不能放在该查询的FROM/JOIN子句中.表名是bankaccounts和creditcards,这是否意味着它们应该是单数的?另外,account_type是一个字符串Bankaccount或Creditcard来反映模型,但它应该是tablename吗?
Pan*_*kos 19
这里有两个问题:
你实际上无法做到这两件事.因此,您应该通过执行以下两个查询来获得相同的错误:
要实际获取所需的信息,必须明确列出可能的父多态关联.一种方法是简单地使用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
)
Run Code Online (Sandbox Code Playgroud)
PS:最好使用:join而不是:include如果您不打算在查询后访问联接对象.
归档时间: |
|
查看次数: |
8826 次 |
最近记录: |