如何在Rails 5中为现有类添加方法?

对不起,我的英语不好。 我必须在Rails的Date类中添加一个方法,因为我想使用我的翻译日名称。 所以,我尝试过:

class Date def date_of_next(day) date = Date.parse(day) delta = date > Date.today ? 0 : 7 date + delta end end 

在config / initializers / date_of_next.rb中但是当我在我的控制器中调用Date.date_of_next(day)时,我得到“没有方法在日期”。 我怎样才能做到这一点? 我应该把文件放在哪里?

将猴子修补的文件放在initializers器下是好的(尽管“好”的猴子补丁本身是多么:))。

您想将方法定义更改为以下内容:

 class Date def self.date_of_next(day) date = parse(day) delta = date > today ? 0 : 7 date + delta end end 

您的问题是您在对象Date上调用了单例方法,而没有定义此类方法。

正如Andrey Deineko在他的评论中指出的那样(现在回答),你编写了一个实例方法但是调用了一个类方法。 尝试:

 class Date def self.date_of_next(day) date = Date.parse(day) delta = date > Date.today ? 0 : 7 date + delta end end 

另一种(可能更好)的方法是使用实​​例方法更加面向对象:

 class Date def date_of_next delta = self > Date.today ? 0 : 7 self + delta end end day.date_of_next # you might want to pick a better name 

还有一个提示:猴子补丁(以这种方式扩展现有的类)从长远来看并不是最好的解决方案。 您可能希望某天切换到不同的模式。