Helper_method很简单:它使控制器的部分或全部方法对视图可用。

什么是帮手?是反过来,即,它导入helper方法到文件或模块?(也许名字helper和helper_method是相似的。它们可能是share_methods_with_view和import_methods_from_view)

参考


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

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

另一方面,helper方法用于将整个helper导入到控制器提供的视图(以及它继承的控制器)。这意味着做

# application_controller.rb
helper :all

For 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

使所有助手模块对所有视图可用(至少对所有继承自application_controller的控制器可用)。

# home_controller.rb
helper UserHelper

使UserHelper方法对主控制器的操作的视图可用。这相当于这样做:

# HomeHelper
include UserHelper

Helper方法用于执行跨多个类常见的特定重复任务。这可以防止我们在不同的类中一次又一次地重复同一段代码。

下面是一个简化上述定义的例子:

这是一个代码,在视图中你会有这样的东西:

<% if @user && @user.email.present? %>
  <%= @user.email %>
<% end %>

我们可以把它清理一下,放到一个helper中:

module SiteHelper
  def user_email(user)
    user.email if user && user.email.present?
  end
end

然后在视图代码中,你调用helper方法并将它作为参数传递给用户。

<%= user_email(@user) %>

这种提取使视图代码更容易阅读,特别是在明智地选择帮助器方法名时。

我希望这能让你们清楚一点。

报价来源 代码的源代码