Bac*_*cko 3 ruby methods ruby-on-rails ruby-on-rails-3
我正在使用Ruby on Rails 3.0.9,我试图从内部帮助器,控制器,模型和视图文件中调用一些方法.我想要做的是创建一个库,在我的应用程序内部构建\ standardize命名约定,以便我可以使用\运行如下所示:
standardized_name = standardize_name(Article)
Run Code Online (Sandbox Code Playgroud)
你有什么建议?
PS:我听说过mixin,但我应该如何在我的情况下使用它们?此外,我不想在每个需要使用它的类中声明包含mixin(也就是说,我希望在我的所有应用程序类中都有一个包含mixin的"唯一"语句).
可以在Rails MVC的所有层中访问的类似库是I18n.您可以使用I18n.t调用translate方法,而视图和控制器层中有一个辅助方法,因此您不需要每次都输入整个"I18n.t".
我们可以按照I18n的说法去做.您可以在应用程序的lib目录中创建一个模块.确保更新application.rb以便加载模块.在application.rb中查找此注释:
# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)
Run Code Online (Sandbox Code Playgroud)
显然,如果取消注释autoload_paths行,请将"extras"更改为"lib".
这是一个示例模块lib/Karate.rb:
module Karate
class << self
def punch(grunt)
puts "#{grunt}! *punch*"
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在您可以在应用程序的任何位置调用它:
Karate.punch("boom")
# => boom! *punch*
Run Code Online (Sandbox Code Playgroud)
如果要在View和Controller层中使用辅助方法,只需在application_controller.rb中添加一个方法:
def punch(grunt)
Karate.punch(grunt)
end
Run Code Online (Sandbox Code Playgroud)
并将此方法声明为辅助方法(也在application_controller.rb中),如下所示:
helper_method :punch
Run Code Online (Sandbox Code Playgroud)
但是,请确保您真的需要这个库.我没有质疑你的理由,因为它不会回答你的主要问题.我认为您应该在代码中练习您的命名约定,如果必须,请将其添加到README中,或者向您的团队发送电子邮件.此外,Rails和Ruby已经有了命名约定,所以一定要了解它.
| 归档时间: |
|
| 查看次数: |
2178 次 |
| 最近记录: |