charlotte-ruby / impressionist

Rails Plugin that tracks impressions and page views
MIT License
1.54k stars 313 forks source link

Error: undefined method `impressionist_counter_caching?' for Media:Module #137

Open aoredo opened 10 years ago

aoredo commented 10 years ago

Hello,

I am having issues adding impressionist to the top of the controller in Rails 4 as shown below

class IyaekoController < ApplicationController impressionist def myaction end end

The error is undefined method `impressionist_counter_caching?' for Media:Module

However when I use it in an action like below it works

def image @image = Media.find(params[:id]) @views = @image.impressions_count impressionist(@image) end

My model has is_impressionable :counter_cache => true

And my Media db has t.integer "impressions_count", default: 0

I am interested in applying impressionist to the whole controller so that I can save only unique impressions using the command impressionist :unique => [:impressionable_type, :impressionable_id, :session_hash]

Please you have any suggestions on this?

Thanks

acnalesso commented 10 years ago

Hi @aoredo , Could you provide a failing app please? Thanks and a happy new year.

aoredo commented 10 years ago

Hello Antonio,

Happy New Year! Thanks a lot for the quick response. Do you want me to upload the whole app to Github or are there any particular sections of the app that you want to see?

Thanks On 1 Jan 2014 13:46, "Antonio C Nalesso Moreira" notifications@github.com wrote:

Hi @aoredo https://github.com/aoredo , Could you provide a failing app please? Thanks and a happy new year.

— Reply to this email directly or view it on GitHubhttps://github.com/charlotte-ruby/impressionist/issues/137#issuecomment-31423118 .

aoredo commented 10 years ago

Hello,

I started a new app and it works perfectly but in my main app, i am still getting errors and this is the full framework trace below

impressionist (1.4.13) lib/impressionist/counter_cache.rb:52:in counter_caching?' impressionist (1.4.13) lib/impressionist/counter_cache.rb:22:invalid_impressionable_class?' impressionist (1.4.13) lib/impressionist/counter_cache.rb:18:in updatable?' impressionist (1.4.13) lib/impressionist/counter_cache.rb:14:inimpressionable_counter_cache_updatable?' activesupport (4.0.1) lib/active_support/callbacks.rb:386:in _run__3119954978467361535__save__callbacks' activesupport (4.0.1) lib/active_support/callbacks.rb:80:inrun_callbacks' activerecord (4.0.1) lib/active_record/callbacks.rb:302:in create_or_update' activerecord (4.0.1) lib/active_record/persistence.rb:106:insave' activerecord (4.0.1) lib/active_record/validations.rb:51:in save' activerecord (4.0.1) lib/active_record/attribute_methods/dirty.rb:32:insave' activerecord (4.0.1) lib/active_record/transactions.rb:270:in block (2 levels) in save' activerecord (4.0.1) lib/active_record/transactions.rb:326:inblock in with_transaction_returning_status' activerecord (4.0.1) lib/active_record/connection_adapters/abstract/database_statements.rb:202:in block in transaction' activerecord (4.0.1) lib/active_record/connection_adapters/abstract/database_statements.rb:210:inwithin_new_transaction' activerecord (4.0.1) lib/active_record/connection_adapters/abstract/database_statements.rb:202:in transaction' activerecord (4.0.1) lib/active_record/transactions.rb:209:intransaction' activerecord (4.0.1) lib/active_record/transactions.rb:323:in with_transaction_returning_status' activerecord (4.0.1) lib/active_record/transactions.rb:270:inblock in save' activerecord (4.0.1) lib/active_record/transactions.rb:281:in rollback_active_record_state!' activerecord (4.0.1) lib/active_record/transactions.rb:269:insave' activerecord (4.0.1) lib/active_record/persistence.rb:37:in create' impressionist (1.4.13) app/controllers/impressionist_controller.rb:36:inimpressionist_subapp_filter' impressionist (1.4.13) app/controllers/impressionist_controller.rb:6:in block in impressionist' activesupport (4.0.1) lib/active_support/callbacks.rb:407:in_run712553158971473700process_action__callbacks' activesupport (4.0.1) lib/active_support/callbacks.rb:80:in run_callbacks' actionpack (4.0.1) lib/abstract_controller/callbacks.rb:17:inprocess_action' actionpack (4.0.1) lib/action_controller/metal/rescue.rb:29:in process_action' actionpack (4.0.1) lib/action_controller/metal/instrumentation.rb:31:inblock in process_action' activesupport (4.0.1) lib/active_support/notifications.rb:159:in block in instrument' activesupport (4.0.1) lib/active_support/notifications/instrumenter.rb:20:ininstrument' activesupport (4.0.1) lib/active_support/notifications.rb:159:in instrument' actionpack (4.0.1) lib/action_controller/metal/instrumentation.rb:30:inprocess_action' actionpack (4.0.1) lib/action_controller/metal/params_wrapper.rb:245:in process_action' activerecord (4.0.1) lib/active_record/railties/controller_runtime.rb:18:inprocess_action' actionpack (4.0.1) lib/abstract_controller/base.rb:136:in process' actionpack (4.0.1) lib/abstract_controller/rendering.rb:44:inprocess' actionpack (4.0.1) lib/action_controller/metal.rb:195:in dispatch' actionpack (4.0.1) lib/action_controller/metal/rack_delegation.rb:13:indispatch' actionpack (4.0.1) lib/action_controller/metal.rb:231:in block in action' actionpack (4.0.1) lib/action_dispatch/routing/route_set.rb:80:incall' actionpack (4.0.1) lib/action_dispatch/routing/route_set.rb:80:in dispatch' actionpack (4.0.1) lib/action_dispatch/routing/route_set.rb:48:incall' actionpack (4.0.1) lib/action_dispatch/journey/router.rb:71:in block in call' actionpack (4.0.1) lib/action_dispatch/journey/router.rb:59:ineach' actionpack (4.0.1) lib/action_dispatch/journey/router.rb:59:in call' actionpack (4.0.1) lib/action_dispatch/routing/route_set.rb:680:incall' omniauth (1.1.4) lib/omniauth/strategy.rb:184:in call!' omniauth (1.1.4) lib/omniauth/strategy.rb:164:incall' omniauth (1.1.4) lib/omniauth/builder.rb:49:in call' warden (1.2.3) lib/warden/manager.rb:35:inblock in call' warden (1.2.3) lib/warden/manager.rb:34:in catch' warden (1.2.3) lib/warden/manager.rb:34:incall' rack (1.5.2) lib/rack/etag.rb:23:in call' rack (1.5.2) lib/rack/conditionalget.rb:25:incall' rack (1.5.2) lib/rack/head.rb:11:in call' actionpack (4.0.1) lib/action_dispatch/middleware/params_parser.rb:27:incall' actionpack (4.0.1) lib/action_dispatch/middleware/flash.rb:241:in call' rack (1.5.2) lib/rack/session/abstract/id.rb:225:incontext' rack (1.5.2) lib/rack/session/abstract/id.rb:220:in call' actionpack (4.0.1) lib/action_dispatch/middleware/cookies.rb:486:incall' activerecord (4.0.1) lib/active_record/query_cache.rb:36:in call' activerecord (4.0.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:incall' activerecord (4.0.1) lib/active_record/migration.rb:369:in call' actionpack (4.0.1) lib/action_dispatch/middleware/callbacks.rb:29:inblock in call' activesupport (4.0.1) lib/active_support/callbacks.rb:373:in _run__2409783271485631515__call__callbacks' activesupport (4.0.1) lib/active_support/callbacks.rb:80:inrun_callbacks' actionpack (4.0.1) lib/action_dispatch/middleware/callbacks.rb:27:in call' actionpack (4.0.1) lib/action_dispatch/middleware/reloader.rb:64:incall' actionpack (4.0.1) lib/action_dispatch/middleware/remote_ip.rb:76:in call' actionpack (4.0.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:incall' actionpack (4.0.1) lib/action_dispatch/middleware/show_exceptions.rb:30:in call' railties (4.0.1) lib/rails/rack/logger.rb:38:incall_app' railties (4.0.1) lib/rails/rack/logger.rb:20:in block in call' activesupport (4.0.1) lib/active_support/tagged_logging.rb:67:inblock in tagged' activesupport (4.0.1) lib/active_support/tagged_logging.rb:25:in tagged' activesupport (4.0.1) lib/active_support/tagged_logging.rb:67:intagged' railties (4.0.1) lib/rails/rack/logger.rb:20:in call' actionpack (4.0.1) lib/action_dispatch/middleware/request_id.rb:21:incall' rack (1.5.2) lib/rack/methodoverride.rb:21:in call' rack (1.5.2) lib/rack/runtime.rb:17:incall' activesupport (4.0.1) lib/active_support/cache/strategy/local_cache.rb:83:in call' rack (1.5.2) lib/rack/lock.rb:17:incall' actionpack (4.0.1) lib/action_dispatch/middleware/static.rb:64:in call' rack (1.5.2) lib/rack/sendfile.rb:112:incall' railties (4.0.1) lib/rails/engine.rb:511:in call' railties (4.0.1) lib/rails/application.rb:97:incall' rack (1.5.2) lib/rack/lock.rb:17:in call' rack (1.5.2) lib/rack/content_length.rb:14:incall' rack (1.5.2) lib/rack/handler/webrick.rb:60:in service' /Users/aoredo/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/httpserver.rb:138:inservice' /Users/aoredo/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/httpserver.rb:94:in run' /Users/aoredo/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/server.rb:295:inblock in start_thread'

aoredo commented 10 years ago

Hello,

Not sure whether this will help, it looks like the problem is writing to PG database. It works well with SQLite but when i change to PG i get error. Please see below -

Started GET "/" for 127.0.0.1 at 2014-01-04 00:21:13 +0000 Processing by IyaekoController#index as HTML (0.2ms) BEGIN SQL (1.2ms) INSERT INTO "impressions" ("action_name", "controller_name", "created_at", "impressionable_type", "ip_address", "request_hash", "session_hash", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id" ["action_name", "index"], ["controller_name", "iyaeko"], ["created_at", Sat, 04 Jan 2014 00:21:13 UTC +00:00], ["impressionable_type", "Iyaeko"], ["ip_address", "127.0.0.1"], ["request_hash", "23c703ecbe3964c6410e32f23eca1cdf027f70b20362f6df5d4c62e28b4016b9"], ["session_hash", "d07573117b44ad3ad09f42bba731c8ce"], ["updated_at", Sat, 04 Jan 2014 00:21:13 UTC +00:00] ROLLBACK Completed 500 Internal Server Error in 9ms

NoMethodError (undefined method impressionist_counter_caching?' for Iyaeko:Module): impressionist (1.4.13) lib/impressionist/counter_cache.rb:52:incounter_caching?' impressionist (1.4.13) lib/impressionist/counter_cache.rb:22:in valid_impressionable_class?' impressionist (1.4.13) lib/impressionist/counter_cache.rb:18:inupdatable?'

tedma4 commented 8 years ago

I just started using the gem and got this exact error right off the bat. This is my error trace. Like @aoredo I have impressionist called out at the top of my controller, but my controller doesn't have a corresponding model tied to it.

qx commented 7 years ago

How to fix it? override impressionist?

climbingblake commented 6 years ago

I too am seeing this error trying to call impressionist from the application_controller on a controller that doent have an assoc model. did you guys happen to find out anything? @tedma4 @qx ?

devonbush commented 5 years ago

Just ran into this issue under the same circumstance--controller without an associated activerecord model. The quick fix I used was to put

Impressionist::CounterCache.class_eval do
  def counter_caching?
    impressionable_class.
      impressionist_counter_caching? if impressionable_class.respond_to? :impressionist_counter_caching?
  end
end

in config/initializers/impression.rb.

smtlaissezfaire commented 2 years ago

This issue seems to happen when you have a controller with a correspondingly named class, but the class isn't db backed (for instance, a PORO object)

I basically did the same thing as @devonbush (thank you!)

Impressionist::CounterCache.class_eval do
  def counter_caching?
    return false if !impressionable_class.respond_to?(:impressionist_counter_caching?)
    impressionable_class.impressionist_counter_caching?
  end
end