如何解决Rails模型上的动态方法
| 我意识到这不一定是最明智的方法,但是现在我的好奇心很活跃,我很好奇该怎么做。 我在Rails项目中有一个模型。我们将其称为“交易”。每个ActiveRecord以及所有很酷的东西,在数据库中都有定义的列,如UPDATED_AT,它们成为Deal的方法:deal.updated_at => \ '04 / 19/1966 3:15 am\' 假设我想改用告诉我星期几而不是整个日期和时间的方法。我意识到DateTime类上有方法,所以我可以 deal.updated_at.day_of_week => \'Monday\' (*)
但是如果我只是想
deal.updated_day => \'Monday\'
我可以写在Deal.rb
def update_day
self.updated_at.day_of_week
end
得到它了。
但是,如果我希望它始终对添加到模型的ANY date列可用,该怎么办?
我在那里看到了define_method(一些在StackOverflow上)。所以我明白这一点。但是我想在ActiveRecord完成魔术之后立即调用它,对吗?因此,如果我的Deal模型具有updated_at,created_at,offed_at和lawsuit_at,则我希望每个方法都具有匹配方法。更重要的是,如果另一个开发人员来了,并添加了一个名为scammed_at的列,我希望创建scammed_day和scammed_at方法。
我该怎么做?
谢谢。
(*)嗯,或类似的东西,我总是看着那个电话。
解决方法
我想以下方法可以解决问题。在您的模型中:
# looping through all model\'s columns
self.columns.each do |column|
#if column\'s name ends with \"_at\"
if column.name =~ /_at$/
#create method like \"udpated_day\"
define_method \"#{column.name[0..-4]}_day\" do
self.send(column.name).day_of_week
end
end
end
但这意味着每一列都有一个有效的day_of_week
方法...
好吧,你明白我的想法。随时询问详细信息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。