抱歉我的英语不好。我必须在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)时,我得到"在Date"中没有方法。 我怎样才能做到这一点?我应该把文件放在哪里?
答案 0 :(得分:3)
正如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
还有一个提示:猴子补丁(以这种方式扩展现有的类)从长远来看并不是最好的解决方案。您可能希望某天切换到不同的模式。
答案 1 :(得分:1)
将猴子修补的文件放在initializers
下是好的(尽管“好的”猴子修补本身如何:)。)。
您想要将方法定义更改为以下内容:
class Date
def self.date_of_next(day)
date = parse(day)
delta = date > today ? 0 : 7
date + delta
end
end
你的问题是你在对象Date
上调用了单例方法,而没有定义这样的方法。