I''ve run into an issue in Rails 3.1 RC4 where the count query is failing because of a default_scope. The scope has an include and a condition on the included association but count is dropping the include. Here''s what it looks like - default_scope where(''campaigns.inactive = ?'', false).order(''funds.name'').includes(:campaigns) Rails 3.1 RC4 - ruby-1.9.2-p180 :001 > Fund.count [2011-06-12 14:35:43 | WARN | n/a | named_scope.rb:175:in `valid_scope_name?'']> Creating scope :all. Overwriting existing method Fund.all.[2011-06-12 14:35:43 | DEBUG | n/a | log_subscriber.rb:105:in `debug'']> (0.4ms) SELECT COUNT(*) FROM "funds" WHERE (campaigns.inactive = ''f'')ActiveRecord::StatementInvalid: PGError: ERROR: missing FROM-clause entry for table "campaigns" LINE 1: SELECT COUNT(*) FROM "funds" WHERE (campaigns.inactive ''f... Rails 3.0.8 - ruby-1.9.2-p180 :001 > Fund.count => 1 SQL (43.8ms) SELECT COUNT(DISTINCT "funds"."id") FROM "funds" LEFT OUTER JOIN "campaigns" ON "campaigns"."fund_id" = "funds"."id" WHERE (campaigns.inactive = ''f'') -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Please could you file this as an issue on Github, with a full example of the models you are using? Jon On Sun, 2011-06-12 at 14:52 -0700, jgelo wrote:> I''ve run into an issue in Rails 3.1 RC4 where the count query is > failing because of a default_scope. The scope has an include and a > condition on the included association but count is dropping the > include. Here''s what it looks like - > > default_scope where(''campaigns.inactive = ?'', > false).order(''funds.name'').includes(:campaigns) > > Rails 3.1 RC4 - > > ruby-1.9.2-p180 :001 > Fund.count > [2011-06-12 14:35:43 | WARN | n/a | named_scope.rb:175:in > `valid_scope_name?''] > > Creating scope :all. Overwriting existing method Fund.all. > [2011-06-12 14:35:43 | DEBUG | n/a | log_subscriber.rb:105:in `debug''] > > (0.4ms) SELECT COUNT(*) FROM "funds" WHERE (campaigns.inactive = ''f'') > ActiveRecord::StatementInvalid: PGError: ERROR: missing FROM-clause > entry for table "campaigns" > LINE 1: SELECT COUNT(*) FROM "funds" WHERE (campaigns.inactive > ''f... > > > Rails 3.0.8 - > > ruby-1.9.2-p180 :001 > Fund.count > => 1 > > SQL (43.8ms) SELECT COUNT(DISTINCT "funds"."id") FROM "funds" LEFT > OUTER JOIN "campaigns" ON "campaigns"."fund_id" = "funds"."id" WHERE > (campaigns.inactive = ''f'') >-- http://jonathanleighton.com/
Hi, I''ve always had problems when I used a "includes" in a default scope with methods such as "count" or "built", try to remove the "includes(:campaigns)", of course the (''campaigns.inactive = ?'', false) do not work. You can use a specific scope like :actives, where(''campaigns.inactive = ?'', false) ¿A better solution? 2011/6/13 Jon Leighton <j@jonathanleighton.com>:> Please could you file this as an issue on Github, with a full example of > the models you are using? > > Jon > > On Sun, 2011-06-12 at 14:52 -0700, jgelo wrote: >> I''ve run into an issue in Rails 3.1 RC4 where the count query is >> failing because of a default_scope. The scope has an include and a >> condition on the included association but count is dropping the >> include. Here''s what it looks like - >> >> default_scope where(''campaigns.inactive = ?'', >> false).order(''funds.name'').includes(:campaigns) >> >> Rails 3.1 RC4 - >> >> ruby-1.9.2-p180 :001 > Fund.count >> [2011-06-12 14:35:43 | WARN | n/a | named_scope.rb:175:in >> `valid_scope_name?''] >> > Creating scope :all. Overwriting existing method Fund.all. >> [2011-06-12 14:35:43 | DEBUG | n/a | log_subscriber.rb:105:in `debug''] >> > (0.4ms) SELECT COUNT(*) FROM "funds" WHERE (campaigns.inactive = ''f'') >> ActiveRecord::StatementInvalid: PGError: ERROR: missing FROM-clause >> entry for table "campaigns" >> LINE 1: SELECT COUNT(*) FROM "funds" WHERE (campaigns.inactive >> ''f... >> >> >> Rails 3.0.8 - >> >> ruby-1.9.2-p180 :001 > Fund.count >> => 1 >> >> SQL (43.8ms) SELECT COUNT(DISTINCT "funds"."id") FROM "funds" LEFT >> OUTER JOIN "campaigns" ON "campaigns"."fund_id" = "funds"."id" WHERE >> (campaigns.inactive = ''f'') >> > > -- > http://jonathanleighton.com/ >-- http://flowersinspace.com http://jose.gr -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.