activerecord-reputation-system icon indicating copy to clipboard operation
activerecord-reputation-system copied to clipboard

TypeError - Array can't be coerced into Float:

Open ericpeters0n opened this issue 11 years ago • 4 comments

SHORTENED FOR BREVITY: Basically, this error can occur if the reputation model is defined using invalid syntax...

HOWEVER, It can also apparently occur when syntax is kosher according to the Github docs.

ericpeters0n avatar Mar 31 '13 02:03 ericpeters0n

Solved! See above.

ericpeters0n avatar Mar 31 '13 22:03 ericpeters0n

Good to hear you solved it. Please close this issue :)

kn avatar Apr 30 '13 01:04 kn

Found another instance of this, even using the correct syntax...

class Link < ActiveRecord::Base

  belongs_to :folder
  belongs_to :user

  has_reputation :avg_rating,
      :source => :user,
      :aggregated_by => :average,
      :source_of => [{ :reputation => :karma, :of => :folder },
                     { :reputation => :karma, :of => :user }]

  has_reputation :views,
      :source => :user,
      :source_of => [{ :reputation => :link_views, :of => :folder }]

  has_reputation :karma,
      :source => [{ :reputation => :avg_rating },
                            { :reputation => :views }],
      :aggregated_by => :product,
      :source_of => [{ :reputation => :karma, :of => :user }, 
                             { :reputation => :karma, :of => :folder }]

Relevant portion of the stack trace:

TypeError: Array can't be coerced into Float
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:87:in `*'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:87:in `update_reputation_value_with_updated_source'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:163:in `update_reputation_value'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:151:in `send_reputation_message_to_receiver'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:140:in `block (2 levels) in propagate_updated_reputation_value'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:138:in `each'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:138:in `block in propagate_updated_reputation_value'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:136:in `each'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:136:in `propagate_updated_reputation_value'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:97:in `update_reputation_value_with_updated_source'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:163:in `update_reputation_value'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:151:in `send_reputation_message_to_receiver'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:140:in `block (2 levels) in propagate_updated_reputation_value'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:138:in `each'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:138:in `block in propagate_updated_reputation_value'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:136:in `each'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:136:in `propagate_updated_reputation_value'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/models/reputation.rb:97:in `update_reputation_value_with_updated_source'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/evaluation_methods.rb:66:in `update_evaluation'
    from /Users/Eric/.rvm/gems/ruby-1.9.2-p320@linksee_demo/gems/activerecord-reputation-system-2.0.2/lib/reputation_system/evaluation_methods.rb:72:in `add_or_update_evaluation'

...which seems to suggest that it's in the propagation of the updated evaluation into the dependent (source_of) models that the problems arise.

So here those are:

class Folder < ActiveRecord::Base
    belongs_to :owner, :class_name => "User"
    has_many :links, :order => 'created_at DESC'
    has_reputation :link_views,
      :source => [{ :reputation => :views, :of => :links }]
    has_reputation :karma,
      :source => [{ :reputation => :avg_rating, :of => :links }],
      :source_of => [{ :reputation => :karma, :of => :owner }]
class User < ActiveRecord::Base
  has_many :folders, :foreign_key => :owner_id
  has_many :links
  has_reputation :karma,
    :source => [{ :reputation => :karma, :of => :links }],
    :aggregated_by => :sum

ericpeters0n avatar May 13 '13 22:05 ericpeters0n

Confirmation (from somebody totally different... simply executing the tutorial code...) here: http://www.neilmarion.com/index.php/twitter-activerecord-reputation-system-the-dreaded-array-cant-be-coerced-into-float-error/

ericpeters0n avatar May 13 '13 22:05 ericpeters0n