impressionist icon indicating copy to clipboard operation
impressionist copied to clipboard

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

Open aoredo opened this issue 11 years ago • 9 comments

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

aoredo avatar Dec 31 '13 13:12 aoredo

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

acnalesso avatar Jan 01 '14 13:01 acnalesso

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" [email protected] 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 avatar Jan 01 '14 14:01 aoredo

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_run__712553158971473700__process_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 avatar Jan 02 '14 13:01 aoredo

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?'

aoredo avatar Jan 04 '14 00:01 aoredo

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.

tedma4 avatar Nov 30 '15 14:11 tedma4

How to fix it? override impressionist?

qx avatar Oct 21 '16 06:10 qx

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 ?

climbingblake avatar Aug 25 '18 17:08 climbingblake

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.

devonbush avatar Oct 31 '18 16:10 devonbush

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

smtlaissezfaire avatar Jan 06 '22 23:01 smtlaissezfaire