acts_as_votable icon indicating copy to clipboard operation
acts_as_votable copied to clipboard

acts_as_votable_options somehow became nil

Open Decoydoll opened this issue 5 years ago • 5 comments

Here is my web app environment:

Rails           : 5.2.2
acts_as_votable : 0.12.0

Here is the stack trace that i got:

…cts_as_votable-0.12.0/lib/acts_as_votable/cacheable.rb: 107:in `update_cached_votes'
…/acts_as_votable-0.12.0/lib/acts_as_votable/votable.rb: 101:in `block in vote_by'
…rd/connection_adapters/abstract/database_statements.rb: 259:in `block in transaction'
…ive_record/connection_adapters/abstract/transaction.rb: 239:in `block in within_new_transaction'
       /opt/rubies/ruby-2.4.1/lib/ruby/2.4.0/monitor.rb: 214:in `mon_synchronize'
…ive_record/connection_adapters/abstract/transaction.rb: 236:in `within_new_transaction'
…rd/connection_adapters/abstract/database_statements.rb: 259:in `transaction'
…s/activerecord-5.2.2/lib/active_record/transactions.rb: 212:in `transaction'
…/acts_as_votable-0.12.0/lib/acts_as_votable/votable.rb:  96:in `vote_by'
…...............app/controllers/api/votes_controller.rb:  24:in `create'

Here is the error message:

NoMethodError: undefined method `[]' for nil:NilClass

After lookin for the code, here is the part of code that throw that error https://github.com/ryanto/acts_as_votable/blob/313f06c6dc38f2a742d6e1300d3a3292d10e9d68/lib/acts_as_votable/cacheable.rb#L107 which call acts_as_votable_options that is assigned in https://github.com/ryanto/acts_as_votable/blob/599995f7ec5aa0f8a04312768fc956e9003d32d4/lib/acts_as_votable/extenders/votable.rb#L24-#L31 which, per my understanding will never be nil except there is another assignment.

My model only calls acts_as_votable without any args so i assume it will use the default options.

Anyone can explain why this could happen?

Decoydoll avatar Mar 01 '19 08:03 Decoydoll

Same issue here.

A temporary workaround will be explicitly defining a method in your acts_as_votable model:

acts_as_votable

def acts_as_votable_options
  @acts_as_votable_options ||= { cacheable_strategy: :update_attributes }
end

ouabing avatar May 30 '19 06:05 ouabing

Same problem here. Whenever i want to down or upvote, I get the exact same error message. Nothing is votable anymore.

Rails: 5.2.3
Version: 0.12.1

fuuman avatar May 11 '20 12:05 fuuman

Does anyone have an app that can reproduce this issue? That would be helpful here!

ryanto avatar Dec 19 '20 17:12 ryanto

Does anyone have an app that can reproduce this issue? That would be helpful here!

Don't have a project to share but the issue is reproducible: the problem seems related to models that implement a single table inheritance, when acts_as_votable is set only on father object.

A workaround working for me is adding acts_as_votable even on child model.

marcodetoni avatar May 25 '22 16:05 marcodetoni