Ruby on rails 在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
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}