Как добавить вычисленное значение в массив в рельсах? - PullRequest
0 голосов
/ 30 декабря 2011

У меня есть опция Product, для которой я рассчитываю взвешенную оценку в Rails.

Я хотел бы вернуть массив, который добавляет вычисленную оценку продукта в массив. Я попробовал:

products.inject {|p| p.exponential_discount_score(0.01) }

Но получил:

NoMethodError: undefined method `exponential_discount_score' for 246.86645269006013:Float
    from (irb):39:in `block in irb_binding'
    from (irb):39:in `each'
    from (irb):39:in `inject'
    from (irb):39
    from /Users/justin/.rvm/gems/ruby-1.9.2-p290@rails-3.1rc4/gems/railties-3.1.1/lib/rails/commands/console.rb:45:in `start'
    from /Users/justin/.rvm/gems/ruby-1.9.2-p290@rails-3.1rc4/gems/railties-3.1.1/lib/rails/commands/console.rb:8:in `start'
    from /Users/justin/.rvm/gems/ruby-1.9.2-p290@rails-3.1rc4/gems/railties-3.1.1/lib/rails/commands.rb:40:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

Я думал, inject сработает, но я думаю, что я делаю что-то не так? Я также попытался .collect, но не смог правильно написать блок.

1 Ответ

1 голос
/ 30 декабря 2011

Проблема в том, что метод, который вы вызываете для подсчета очков, не существует.

Когда вы его создали, вы можете вызвать что-то вроде:

products.collect {|p| p.exponential_discount_score(0.01) }.inject(:+)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...