Thanks for the quick reply Matt, I tried :joins => [:model] instead of :include => [:model], but I get the same error.
The actual #count call does have a conditions statement in there, but I left it out for brevity. I've tried both ways, but they produce the same error. I am hesitant to use #count_by_sql, since someone might search for a value that is in one of the associated models, and I would have to construct those joins and conditions myself, which can get messy. PipingClass is not the only model that will be linked to ModelLoggings. I've search through the restricted keywords for "model", but I didnt' find any reference that it could pose a problem. I dismissed it as a non-issue because of that lighthouse ticket someone else put up with the same problem I am having. I understand it is a bad practice anywho, so I will take your suggestion nonetheless. Do you know of an actual issue this could pose? (The "Rails restricted keywords" articles I've looked at are a bit dated). I'm curious. For now, I am using the #find call, leaving out the limit, and then taking the size of the resulting array (UGLY). This isn't going into heavy use right away, so this hack will work for the time being until I get around to submitting that test to Rails' Lighthouse. In case people are wondering: $ ./script/about About your application's environment Ruby version 1.8.6 (i686-linux) RubyGems version 1.3.1 Rack version 1.0 Rails version 2.3.2 Active Record version 2.3.2 Action Pack version 2.3.2 Active Resource version 2.3.2 Action Mailer version 2.3.2 Active Support version 2.3.2 Environment development Database adapter mysql Thanks! -- Adam Grant Lead Web Engineer Telaeris, Inc. [email protected] (858) 627-9710 On Thu, Aug 6, 2009 at 3:31 PM, Matt Aimonetti <[email protected]>wrote: > Hmm "belongs_to :model, :polymorphic => true" <-- using model has a > class/model name isn't recommended, as a work around I would use #count > passing a condition and/or a join or even directly use count_by_sql. > > - Matt > > > > On Thu, Aug 6, 2009 at 3:24 PM, Adam Grant <[email protected]> wrote: > >> Hi group! >> >> My question is this: Is there a way to turn of eager loading for a #count >> call on a model (ModelLogging.eager_loading = false ??), since that SEEMS to >> be my problem (#count doesn't seem to take the :preload option). >> >> The issue I have is with calling count on a Polymorphic model: >> >> class ModelLogging < ActiveRecord::Base >> belongs_to :model, :polymorphic => true >> end >> >> class PipingClass < ActiveRecord::Base >> has_many :model_loggings, :as => :model >> end >> >> The model_loggings table looks like: >> =============== >> create_table "model_loggings", :force => true do |t| >> t.string "model_type" >> t.integer "model_id" >> t.string "field_name" >> t.string "old_value" >> t.string "new_value" >> t.datetime "modified_at" >> t.integer "employee_id" >> t.datetime "created_at" >> t.datetime "updated_at" >> end >> ============== >> >> There is only one record in the model_loggings table: >> =============== >> #<ModelLogging id: 1, model_type: "PipingClass", model_id: 3331, >> field_name: "class_code", old_value: "BCA", new_value: "A", modified_at: >> "2009-08-06 11:55:44", employee_id: nil, created_at: "2009-08-06 11:55:44", >> updated_at: "2009-08-06 11:55:44"> >> =============== >> >> If I try the following, it works: >> =============== >> > ModelLogging.find(:all, :include => [:model]) >> => [#<ModelLogging id: 1, model_type: "PipingClass", model_id: 3331, >> field_name: "class_code", old_value: "BCA", new_value: "A", modified_at: >> "2009-08-06 11:55:44", employee_id: nil, created_at: "2009-08-06 11:55:44", >> updated_at: "2009-08-06 11:55:44">] >> >> > ModelLogging.count >> => 1 >> =============== >> >> But... >> =============== >> > ModelLogging.count(:include => [:model]) >> => ActiveRecord::EagerLoadPolymorphicError: Can not eagerly load the >> polymorphic association :model >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/associations.rb:1960:in >> `initialize' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/associations.rb:1853:in >> `new' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/associations.rb:1853:in >> `build_join_association' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/associations.rb:1836:in >> `build' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/associations.rb:1839:in >> `build' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/associations.rb:1838:in >> `each' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/associations.rb:1838:in >> `build' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/associations.rb:1758:in >> `initialize' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/calculations.rb:210:in >> `new' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/calculations.rb:210:in >> `construct_calculation_sql' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/calculations.rb:243:in >> `execute_simple_calculation' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/calculations.rb:134:in >> `calculate' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/calculations.rb:130:in >> `catch' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/calculations.rb:130:in >> `calculate' >> from >> /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/calculations.rb:48:in >> `count_without_trace_ActiveRecord___self_name__find' >> from >> /home/telaeris/sandbox/po_tracker_bpcherrypoint/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:138:in >> `count_without_trace_ActiveRecord_find' >> ... 55 levels... >> from >> /usr/local/lib/ruby/gems/1.8/gems/rack-1.0.0/lib/rack/handler/mongrel.rb:61:in >> `process' >> from >> /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:159:in >> `process_client' >> from >> /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in `each' >> from >> /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in >> `process_client' >> from >> /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `run' >> from >> /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in >> `initialize' >> from >> /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `new' >> from >> /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `run' >> from >> /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in >> `initialize' >> from >> /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `new' >> from >> /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `run' >> from >> /usr/local/lib/ruby/gems/1.8/gems/rack-1.0.0/lib/rack/handler/mongrel.rb:34:in >> `run' >> from >> /home/telaeris/.gem/ruby/1.8/gems/rails-2.3.2/lib/commands/server.rb:111 >> from >> /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in >> `gem_original_require' >> from >> /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' >> ================ >> >> Not sure what to do without diving into AR internals some more, something >> I don't really want to do. >> >> I've also found this ticket, but no action has really happened on it. I am >> pondering submitting a failing test case for it if I can't think of another >> way around this: >> >> >> https://rails.lighthouseapp.com/projects/8994/tickets/1166-count-works-differently-than-find-with-polymorphic-include >> >> Any thoughts? >> >> PS: I should be at tonight's meeting, and I am pushing to attend the RBBQ, >> but I may be fishing for longer than expected that day. >> >> Thanks! >> >> -- >> Adam Grant >> Lead Web Engineer >> Telaeris, Inc. >> [email protected] >> (858) 627-9710 >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ SD Ruby mailing list [email protected] http://groups.google.com/group/sdruby -~----------~----~----~----~------~----~------~--~---
