我在創建一個Rails應用程序,我必須區分主頁的標題。Rails,在主頁上呈現不同的標題
我已經創建了一個帶有_home_header版本和_header版本的部分,以便在每個頁面中使用,但是我不知道如何管理這些更改。
標題包含在我的佈局中,併爲每個頁面呈現相同的佈局。當我請求主頁時,如何告訴「佈局」使用_home_header版本而不是標準版本?
我在創建一個Rails應用程序,我必須區分主頁的標題。Rails,在主頁上呈現不同的標題
我已經創建了一個帶有_home_header版本和_header版本的部分,以便在每個頁面中使用,但是我不知道如何管理這些更改。
標題包含在我的佈局中,併爲每個頁面呈現相同的佈局。當我請求主頁時,如何告訴「佈局」使用_home_header版本而不是標準版本?
我會用current_page?
助手,並期待在root_path
。
# app/views/layouts/application.html.erb
<% if current_page?(root_path) %>
<%= render 'layouts/home_header' %>
<% else %>
<%= render 'layouts/header' %>
<% end %>
通常,您可以在控制器特定的子目錄中添加更多特定版本的頁面。
也就是說,如果你有一個佈局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會加載更「特定」的頭文件。
我知道,但我必須在每個視圖中添加默認版本...我只需要覆蓋頭時,我加載主頁。 –
到@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><%[email protected]%></title>
他的解決方案的明亮部分是所有文本保存在視圖文件中,這是有道理的。不那麼明亮的部分是難以遵循的。
使用這樣的事情在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 %>
你可以在主頁的視圖中使用content_for嗎? http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for – katzmopolitan