首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >helper和helper_method做什么?

helper和helper_method做什么?
EN

Stack Overflow用户
提问于 2010-10-22 06:55:04
回答 2查看 98.7K关注 0票数 216

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

什么是helper?它是另一种方式吗?也就是说,它将助手方法导入到文件或模块中?(也许helperhelper_method的名字很相似。它们可能是share_methods_with_viewimport_methods_from_view)

reference

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-22 09:40:26

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

代码语言:javascript
复制
#application_controller.rb
def current_user
  @current_user ||= User.find_by_id!(session[:user_id])
end
helper_method :current_user

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

代码语言:javascript
复制
# application_controller.rb
helper :all

对于Rails > 3.1

代码语言:javascript
复制
# application.rb
config.action_controller.include_all_helpers = true
# This is the default anyway, but worth knowing how to turn it off

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

代码语言:javascript
复制
# home_controller.rb
helper UserHelper

使UserHelper方法可用于主控制器的操作的视图。这相当于执行以下操作:

代码语言:javascript
复制
# HomeHelper
include UserHelper
票数 315
EN

Stack Overflow用户

发布于 2022-02-26 19:17:50

助手方法用于执行在多个类中常见的特定重复性任务。这可以避免我们在不同的类中一次又一次地重复同一段代码。

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

下面是一段代码,你可以在视图中看到类似这样的内容:

代码语言:javascript
复制
<% if @user && @user.email.present? %>
  <%= @user.email %>
<% end %>

我们可以稍微清理一下,然后把它放到一个帮助器中:

代码语言:javascript
复制
module SiteHelper
  def user_email(user)
    user.email if user && user.email.present?
  end
end

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

代码语言:javascript
复制
<%= user_email(@user) %>

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

所以我希望这篇文章能让你明白一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3992659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档