我正在创建一个rails应用程序,我必须区分主页的标题。
我已经使用_home_header版本和_header版本创建了一个部分版本,但我不知道如何管理更改。
标题包含在我的布局中,我为每个页面呈现相同的布局。我如何告诉"布局"我请求主页时使用_home_header版本而不是标准版本?
答案 0 :(得分:14)
我会使用current_page?
助手并查看root_path
。
# app/views/layouts/application.html.erb
<% if current_page?(root_path) %>
<%= render 'layouts/home_header' %>
<% else %>
<%= render 'layouts/header' %>
<% end %>
答案 1 :(得分:2)
在application.html.erb
<% if request.original_url == root_url %> ## Specify the home url instead of root_url(if they are different)
<%= render 'layouts/home_header' %> ## Assuming that _home_header.html.erb is under layouts directory
<% else %>
<%= render 'layouts/header' %> ## Assuming that _header.html.erb is under layouts directory
<% end %>
答案 2 :(得分:1)
通常,您在特定于控制器的子目录中添加更多特定版本的页面。
也就是说,如果你有一个布局application.html.erb
,它会使标题部分...
# app/views/layouts/application.html.erb
<!doctype html>
<html>
...
<body>
<%= render 'header' %>
...
这将在header
中找到app/views/<controller_name>/
部分优先于app/views/application/
。因此,您的网站范围标题将位于app/views/application/_header.html.erb
,而您的主页部分将位于app/views/home/_header.html.erb
,并且它将“正常工作”。 Rails会加载更“特定”的标题。
答案 3 :(得分:1)
@meagar建议的一个选项是在你的应用程序控制器上使用before_action
:
class ApplicationController
beore_action :set_header
private
def set_header
@header = if is_my_page
"Special header"
else
"Other header"
end
end
end
和您的layouts/application.html.erb
:
<title><%=@title%></title>
他的解决方案的亮点是所有文本都保存在视图文件中,这是有道理的。不那么明亮的部分是难以理解的。