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)
Таким образом, после некоторого чтения я столкнулся с этим: причина состоит в том, что тип родительской модели является значением столбца, таким образом, его соответствующее имя таблицы не может быть вставлено ИЗ/СОЕДИНЕНИЕ пунктов того запроса. Имя таблицы является bankaccounts и кредитными картами, таким образом, это означает, что они должны быть исключительными? Также account_type является строкой или Bankaccount или Creditcard для отражения модели, но это должно быть имя таблицы вместо этого?
Здесь есть две проблемы:
Вы не можете делать ни то, ни другое. Таким образом, вы должны получить ту же ошибку, выполнив эти два запроса:
Чтобы действительно получить необходимую информацию, вы должны явно перечислить возможные родительские полиморфные ассоциации. Один из способов сделать это - просто использовать 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
)
PS: Лучше использовать: join вместо: include, если вы не планируете получать доступ к объединенным объектам после запроса.