Techioz Blog

Railsのクラスメソッドを使用してsort_byを行う方法

概要

クラスメソッドを使用してインスタンスをランク付けしようとしています。

@sorted_datsk_hpe = all_datsk_hpe.sort_by { |hpe| Hpe.datsk_point_count(hpe) }

ここに連れて行きます:

def self.datsk_point_count(hpe)
    points = 0
    if hpe.gen_ac != ""
      if hpe.gen_aa != nil
        points += hpe.gen_aa.to_i * hpe.gen_acd
      else
        points += hpe.gen_amc.to_i * hpe.gen_acd
      end
    else
      (1..10).each do |num|
        if hpe["ad_c_#{num}"] != ""
          if hpe["ad_c_#{num}_available"] != nil
            points += hpe["ad_c_#{num}_available"].to_i * hpe["ad_c_#{num}_discount"]
          else
            points += hpe["ad_c_#{num}_max_capacity"].to_i * hpe["ad_c_#{num}_discount"]
          end
        end
      end
    end
    points
  end

それは私に与えます

TypeError: String can't be coerced into Integer
    from app/models/hpe.rb:420:in `+'
    from app/models/hpe.rb:420:in `datsk_point_count'
    from (irb):30:in `block in irb_binding'
    from (irb):30:in `sort_by'
    from (irb):30

しかし、クラスメソッドを単一のインスタンスで単独で実行すると機能するので、sort_byの実行が間違っているのでしょうか?

解決策

コードは正しかったのですが、JavaScript などを変更するときにページを更新する必要があるのと同様に、モデル コードを変更するにはコンソールを再起動する必要があることに気づいていませんでした。

私は初心者なので正確ではないかもしれませんが、コンソールを再起動すると問題は解決しました。