ruby-on-rails – ActiveRecord :: EagerLoadPolymorphicError:无法加载多态关联

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – ActiveRecord :: EagerLoadPolymorphicError:无法加载多态关联前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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来反映模型,但应该是tablename?

解决方法

这里有两个问题:

>对多态关联进行求和.
>多态关联的条件.

你实际上不能做这些事情之一.所以你应该得到相同的错误,执行这两个查询

> 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,:conditions => "bankaccounts.status = 'active'",:joins => :transaction
)

P.S:最好使用:join而不是:include,如果您不打算在查询后访问加入的对象.

猜你在找的Ruby相关文章