Skip to content
This repository has been archived by the owner on Nov 13, 2021. It is now read-only.

TypeError - Array can't be coerced into Float: #42

Open
ericpeters0n opened this issue Mar 31, 2013 · 4 comments
Open

TypeError - Array can't be coerced into Float: #42

ericpeters0n opened this issue Mar 31, 2013 · 4 comments

Comments

@ericpeters0n
Copy link

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
Copy link
Author

Solved! See above.

@kn
Copy link

kn commented Apr 30, 2013

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

@ericpeters0n
Copy link
Author

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
Copy link
Author

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/

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants