activerecord-reputation-system
activerecord-reputation-system copied to clipboard
TypeError - Array can't be coerced into Float:
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.
Solved! See above.
Good to hear you solved it. Please close this issue :)
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
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/