我想通過製作一個可重用的常用方法來幹掉我的Rails代碼。爲此,我必須創建一些字段/屬性以及代碼變量中使用的類名稱,以便它可以爲三個模型(及其字段)使用相同的代碼。我試圖從這個question和this one中學習,但我一直無法使它工作。在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
。
有人可以幫我確定我做錯了什麼嗎?