我想通过创建一个可以重用的通用方法来干燥我的 Rails 代码。为此,我必须创建一些字段/属性和代码变量中使用的类名,以便它可以用于具有相同代码的三个模型(及其字段)。我试图从这个问题和这个问题中学习,但我无法让它发挥作用。
在我的模型中,我有这个:
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
。
有人可以帮我确定我做错了什么吗?