I’m running rails 2.3.10 on PostgreSQL. I have an issue where if I do
a search on a database view with an :include directrive it does not
load up the associated models as requested so I’m stuck with the old N
+1 problem.
It works fine when dealing with a model from a proper DB table that
includes another model:
BankStatement.all( :include => :bank_account, :limit => 10 )
produces the following in my log file:
SELECT * FROM “bank_statements” ORDER BY statement_date DESC
SELECT * FROM “bank_accounts” WHERE (“bank_accounts”.“id” IN
(12,25,14,1,3,4))
as expected.
Now in the case where we have objects pulled in from a view
(balace_sheet_transaction is a view that has a statement_account_id):
BalanceSheetTransaction.all( :include => :statement_account, :limit
=> 10 )
the following is in the log
SELECT * FROM “balance_sheet_transactions” LIMIT 10
SELECT * FROM “statement_accounts” WHERE (“statement_accounts”.“id”
= 285)
It only loads up the statement account of the first
balance_sheet_transaction object. If I do an array map to the
statement_account I will then see 10 lines in the log like SELECT *
FROM “statement_accounts” WHERE (“statement_accounts”.“id” = 285)
where each ID is different.
Is there a limitation to using the :include with views? Is it
PostgreSQL specific? Any other hints why :include is being ignored in
the case?
Thanks in advance,
Farrel