helper和helper_method做了什么?

nop*_*ole 196 ruby-on-rails helper

helper_method 很简单:它使部分或全部控制器的方法可用于视图.

什么是helper?是否相反,即它将辅助方法导入文件或模块?(也许是名字helperhelper_method相似.他们可能更愿意share_methods_with_viewimport_methods_from_view)

参考

Jer*_*emy 286

该方法helper_method是显式共享控制器中定义的一些方法,以使它们可用于视图.这用于您需要从控制器和帮助器/视图访问的任何方法(标准辅助方法在控制器中不可用).例如常见用例:

#application_controller.rb
def current_user
  @current_user ||= User.find_by_id!(session[:user_id])
end
helper_method :current_user
Run Code Online (Sandbox Code Playgroud)

helper另一方面,该方法用于将整个帮助程序导入控制器(以及它的继承控制器)提供的视图.这意味着什么

# application_controller.rb
helper :all
Run Code Online (Sandbox Code Playgroud)

对于Rails> 3.1

# application.rb
config.action_controller.include_all_helpers = true
# This is the default anyway, but worth knowing how to turn it off
Run Code Online (Sandbox Code Playgroud)

使所有辅助模块可用于所有视图(至少对于继承自application_controller的所有控制器.

# home_controller.rb
helper UserHelper
Run Code Online (Sandbox Code Playgroud)

使UserHelper方法可用于视图以获取家庭控制器的操作.这相当于:

# HomeHelper
include UserHelper
Run Code Online (Sandbox Code Playgroud)

  • 在Rails> = 3.1中,应用程序控制器中的'helper:all'被application.rb中的'include_all_helpers'配置设置替换.请参见http://stackoverflow.com/questions/1179865/. (20认同)
  • 除了一些简单的语法糖之外,使用"helper"和"include"之间存在差异."helper"使命名模块可用于视图,仅用于视图."include"使命名模块可用于视图和控制器.两者都会影响继承的控制器及其视图. (3认同)