我的布局和部分工作正常。问题是不同的模型都有相同的标题。如果我能为每个模型定制标题会很好。
这是我的布局:
<html>
<head>
<title><%= content_for :title %></title>
</head>
<body>
<%= render 'header' %>
<%= render "sidebar" %>
<%= render "content" %>
<%= render template: "layouts/footer" %>
</body>
</html>
这是我的控制器,我尝试根据undefined method `content_for' in presenter rails进行工作:
class ViewerController < ApplicationController
def index
helpers.content_for :title, "Viewer"
#helpers.content_for (:title) "Viewer" #doesn't work
end
def helpers
ActionController::Base.helpers
end
end
我尝试将布局更改为&lt;%= helpers.content_for:title%&gt;但它不起作用。我也尝试将控制器更改为helpers.content_for(:title)&#34; Viewer&#34;和elpers.content_for(:title)|| &#34;查看器&#34;基于其他帖子,但他们失败了。
如果这种方法不起作用,那么我向另一方开放。
答案 0 :(得分:2)
我明白了。这是我的布局:
<!DOCTYPE HTML>
<html>
<head>
<title><%= yield :title %></title>
</head>
<body>
<%= render 'header' %>
<%= render "sidebar" %>
<%= render "content" %>
<%= render template: "layouts/footer" %>
</body>
这是我的观点(index.html.erb):
<% provide(:title, "Viewer") %>
我不知道erb会执行,即使它没有被调用在任何地方显示。我没有&lt;%= yeild%&gt;任何地方。我可以把HTML放在那里,没有人会看到它。但ruby代码将会执行。
答案 1 :(得分:0)
您的布局应为yield :title
而不是content_for :title
。通过这种方式,对于您的控制器,您可以正确地执行操作,并将布局的内容设置为各自的标题。
使用yield: title
,您实际上与render
做同样的事情,除了它由其他控制器/视图/模型处理。
答案 2 :(得分:0)
在application_helper.rb中添加以下代码:
def full_title(page_title = '')
base_title = "Ruby on Rails Tutorial Sample App"
if page_title.empty?
base_title
else
page_title + " | " + base_title
end
在application.html.erb文件中添加以下代码:
<title><%= full_title(@title) %></title>
在控制器中只需将值赋给实例变量,如:
@title = "Home"
但是使用实例变量显示标题并不是一个好主意。