再利用される共通のメソッドを作成して、Railsコードをドライアップしたいと思います。そのためには、コード変数で使用されるいくつかのフィールド/属性とクラス名を作成する必要があります。これにより、同じコードで3つのモデル(およびそれらのフィールド)で機能できるようになります。この質問とこれから学ぼうとしましたが、うまくいきませんでした。
私のモデルでは、これがあります:
def self.update_percentages
update_percentages_2(User, "rank", "top_percent")
end
def self.update_percentages_2(klass, rank_field, percent_field)
rank_class = (klass.name).constantize
total_ranks = rank_class.maximum(rank_field)
top_5 = (total_ranks * 0.05).ceil
rank_class.find_each do |f|
if f.send("#{rank_field}") <= top_5
f.send("#{percent_field}", 5)
f.save
end
end
end
このコードで、私は得ArgumentError: wrong number of arguments (1 for 0)
ます。問題を絞り込むために行をコメントアウトし始めるとf.send("#{percent_field}", 5)
、エラーの原因のようです。
そして、私が追加した場合:
percent_field = (percent_field).constantize
私は得る:Name Error: wrong constant name top_percent
。
誰かが私が間違っていることを判断するのを手伝ってもらえますか?