【发布时间】:2014-12-21 09:41:49
【问题描述】:
我有一些函数可以在一个名为string_class.rb 的文件中对字符串类进行猴子修补,该文件当前位于config\initializers\string_class.rb 中。代码如下所示:
class String
def capitalize_first_char
self.sub(/^(.)/) { $1.capitalize }
end
def capitalize_each_sentence
self.gsub(/([a-z])((?:[^.?!]|\.(?=[a-z]))*)/i) { $1.upcase + $2.rstrip }
end
end
在做了相当多的研究之后,我不确定这个类是否应该放在 initializers 或 lib 文件夹中。
【问题讨论】:
-
顺便说一句,这些是修补字符串的不良候选者。它们(大概)纯粹是为了展示目的。您应该只在
app/helpers/*_helper.rb中编写辅助函数。 -
@meagar 我希望它们在所有控制器和视图中都可用,所以助手会出来吗?
-
不,这对助手来说是很正常的要求。如果您的控制器需要它们,您只需在
ApplicationController中定义方法。这使得它们对所有控制器都可用,而不是从您的ApplicationController继承,这应该是所有控制器。然后用helper_method :capitalize_first_char, :capitalize_each_sentence指定它们是辅助方法,它们也将在每个视图中可用。 -
@meagar 我更喜欢这个主意,我会把它们移到那里。如果您想在下面添加答案,我会折腾您:)
-
在核心课程中胡闹几乎总是一个坏主意。字符串就是字符串,每个 Ruby 开发人员都希望它们以某种方式运行。将新方法修补到字符串中意味着 your 字符串的行为与其他字符串略有不同。这也意味着,如果新版本的 Ruby 引入同名的方法(不太可能,不可否认),您的代码将突然隐藏一个真正的 String 方法。在实践中,当有真正的需要时,可以extreme适度地修补核心类。这不是其中一种情况。
标签: ruby-on-rails ruby directory monkeypatching