Ruby on rails 在Rails中使用变量名作为属性

Ruby on rails 在Rails中使用变量名作为属性,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想通过创建一个可重用的通用方法来干涸我的Rails代码。为了做到这一点,我必须创建一些字段/属性以及代码变量中使用的类名,这样就可以使用相同的代码为三个模型(及其字段)工作。我试着从中学习,但我一直没能让它发挥作用 在我的模型中,我有: def self.update_percentages update_percentages_2(User, "rank", "top_percent") end def self.update_percentages_2(klass

我想通过创建一个可重用的通用方法来干涸我的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
def self.update\u百分比
更新百分比2(用户,“排名”、“最高百分比”)
结束
定义自我更新百分比2(klass、等级字段、百分比字段)
rank_class=(klass.name).constantize
总等级=等级等级等级。最大值(等级字段)
排名前5位=(总排名*0.05)。ceil
排名。找到每个人做的事情|

如果f.send(“#{rank_field}”)如果要分配给属性,则需要具有等号的方法名:

f.send("#{percent_field}=", 5)
此外,这:

rank_class = (klass.name).constantize
相当于:

rank_class = klass

我将重写您的方法以更新事务中所有符合条件的记录

def self.update_percentages_2(klass, rank_field, percent_field)
  top_5 = ( klass.maximum(rank_field) * 0.05).ceil   
  klass.where("#{rank_field} <= ?", top_5).update_all(percent_field => 5)
end
def self.update_percentage_2(klass,rank_字段,percent_字段)
top_5=(klass.最大值(排名字段)*0.05)。ceil
klass.where(“#{rank_field}