如果在Ruby on Rails上,我需要添加一个名为
class String
def capitalize_first
# ...
end
end
想知道文件应该去哪里?(哪个目录和文件名,是否需要任何初始化代码?)这用于Rails 3.0.6项目。
Answers:
我总是在core_ext
目录中添加lib
目录。
创建一个用于加载自定义扩展名的初始化程序(例如:)config/initializers/core_exts.rb
。并在其中添加以下行:
Dir[File.join(Rails.root, "lib", "core_ext", "*.rb")].each {|l| require l }
并使用以下扩展名:
lib/core_ext/string.rb
class String
def capitalize_first
# ...
end
end
class Application < Rails::Application ... config.autoload_paths += Dir[File.join(Rails.root, "lib", "core_ext", "*.rb")].each {|l| require l } ...
lib/core_ext/string.rb
,请不要忘记require 'core_ext/string'
在文件顶部包含使用扩展名的位置。
lib
目录不应位于app
目录内。
Rails 3.1中的准则是解决方法:
http://guides.rubyonrails.org/plugins.html#extending-core-classes
如果遵循默认约定,则无需弄乱初始化程序配置。
String
类还是仅在视图中使用辅助方法?但是,然后,如果它是一个帮助者,那么使其在控制器(或模型)中工作也很麻烦,并且无法像s.capitalize_first.truncate(30)