0

我试图创建一个帮助模块来设置页面的标题。当然它不起作用(参考)我必须在控制器中定义什么东西才能让我的控制器看到我的助手方法吗?

未定义的方法

Gitlink:works_controller.rb

  def index
    set_title("Morning Harwood")
    @works = Work.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @works}
    end
  end

application_helper.rb 中

module ApplicationHelper
    def set_title(title = "Default title")
      content_for :title, title
    end  
end

在布局work.html.erb 中

 <%= content_for?(:title) ? content_for(:title) : 'This is a default title' %>
4

1 回答 1

3

Rails 中的 Helpers 是视图中可用的方法(如果包含它们,还有控制器),它们允许您避免视图中的代码重复。

我的代码中的一个帮助器示例是一种为 facebook 登录按钮呈现 html 的方法。这个按钮实际上比用户看到的要多,因为它是一个带有一些附加信息等的隐藏表单。出于这个原因,我想用它制作一个辅助方法,所以我可以调用一个而不是多次复制 10 行代码单一方法。这更干燥。

现在,回到你的例子,你想做两件事

  • 显示页面<title>
  • <h1>在页面顶部添加标题。

我现在看到链接的答案不够清楚。你确实需要助手,但你也需要调用它!所以

# application_helper.rb
def set_title(title = "Default title")
  content_for :title, title
end

# some_controller.rb
helper :application

def index
  set_title("Morning Harwood")
end

然后在布局的视图中,您可以使用:

<title> <%= content_for?(:title) ? content_for(:title) : 'This is a default title' %><</title>
...
<h1><%= content_for?(:title) ? content_for(:title) : 'This is a default title' %></h1>
于 2013-07-21T08:25:58.983 回答