ruby-on-rails – Rails模型的动态方法
我意识到这不一定是最聪明的方法,但现在我的好奇心是活跃的,我很好奇如何做到这一点.
我在Rails项目中有一个模型.我们称之为Deal.每个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 得到它了. 但是,如果我希望它始终具有可用于添加到模型的任何日期列的方法,该怎么办? 我在那里看到了define_method(StackOverflow上有一些).所以我明白了.但我想在ActiveRecord发挥其魔力之后立即调用它,对吗?因此,如果我的交易模型有updated_at,created_at,provided_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方法…… 那你就明白了我的想法.不要犹豫,询问细节 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |