类<<ruby中的self及其方法



我在ruby on rails中有一个模型,下面的代码使用了一个singleton类定义。还有一些元编程逻辑。但是,我不知道这段代码什么时候会调用。是在下面指定的属性正在编辑时吗?

class Product < ApplicationRecord
class << self
['cat_no', 'effort', 'impact', 'effect', 'feedback'].each do |attr| 
define_method "update_#{attr}" do |pr, count, user_id|
pr.order=pr.cat_no     
pr.idea=pr.description
pr.update("#{attr}"=>count,:last_modified_by=>user_id)
end
end
end
end

请帮忙。感谢

此代码生成五个方法,列表中的每个属性名称对应一个方法。所有这些生成的方法都有三个参数,基本上如下所示(我以impact属性名为例(:

def self.update_impact(pr, count, user_id)
pr.order = pr.cat_no     
pr.idea = pr.description
pr.update("impact" => count, :last_modified_by => user_id)
end

这意味着生成了五个方法,它们使用来自自身的一些数据以及countuser_id来更新传入的pr

请注意,此方法只处理特定的pr,因此使用实例而不是Stefan在评论中建议的类方法当然更好。IMO在元编程方面并没有真正的好处。我会将逻辑更改为

def update_count(type, count, user_id) # or any another name that makes sense in the domain
if type.in?(%i[cat_no effort impact effect feedback])
update(
:order => cat_no, 
:idea => description, 
:last_modified_by => user_id, 
type => count
)
else
raise ArgumentError, "unsupported type '#type'"
end
end

并将其称为

Model.update_impact(pr, count, user_id)

像这个

pr.update_count(:impact, count, user_id)

相关内容

最新更新