在Rails中的控制器和视图中使用的辅助方法

我知道我可以在Rails中的helper文件夹中的Helper类中放置一个帮助器方法。 然后该方法可以在任何视图中使用。 我知道我可以在ApplicationController类中放置方法,并且该方法可以在任何控制器中使用。

放置控制器和视图中经常使用的方法的适当位置在哪里?

你可以将它放在控制器中并调用:

 helper_method :my_method 

来自控制器。

您可以将一个方法放在一个控制器中,然后在控制器中调用helper_method来指示该方法是否可用,就好像它也在一个帮助器中一样。

例如:

 class ApplicationController helper_method :this_is_really_useful def this_is_really_useful # Do useful stuff end 

然后,此方法可用于所有控制器和所有视图。

我把你描述的帮助器放在我的lib/目录中的模块中。 给定一些MyApp应用程序,这将在app/lib/my_app/helpers.rb看起来像

 module MyApp module Helpers extend self def some_method # ... end end end 

接下来,您必须要求此模块。 在config/initializers/my_app.rb上创建一个新的初始化config/initializers/my_app.rb ,看起来像

 require 'my_app' 

并确保config.autoload_paths包含config/application.rb中的lib/目录。

 config.autoload_paths += Dir["#{config.root}/lib", # other paths here... ] 

最后,将模块包含在您想要使用的任何位置。 无处不在

app/controllers/application_controller.rb

 class ApplicationController < ActionController::Base include MyApp::Helpers 

app/helpers/application_helper.rb

 module ApplicationHelper include MyApp::Helpers 

我认为这是一种更清晰,更可测试的方法来管理整个应用程序中的可重用帮助程序。