【发布时间】:2011-08-05 00:00:45
【问题描述】:
如果在 Ruby on Rails 上,我需要添加一个名为
的方法class String
def capitalize_first
# ...
end
end
想知道文件应该放在哪里? (哪个目录和文件名,是否需要初始化代码?)这是针对 Rails 3.0.6 项目的。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3
如果在 Ruby on Rails 上,我需要添加一个名为
的方法class String
def capitalize_first
# ...
end
end
想知道文件应该放在哪里? (哪个目录和文件名,是否需要初始化代码?)这是针对 Rails 3.0.6 项目的。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3
你可以在 config/initializers/string.rb 中做到这一点
class String
def capitalize_first
# ...
end
end
应该是您所需要的(除了重新启动应用程序)。
【讨论】:
我总是在我的lib 目录中添加一个core_ext 目录。
创建一个initializer 用于加载自定义扩展(例如: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
【讨论】:
String 类还是只在视图中使用辅助方法?但是,如果是helper,那么让它在controller(或model)中工作也很麻烦,不能像s.capitalize_first.truncate(30)
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
如果你遵循默认约定,你就不需要搞乱初始化配置。
【讨论】: