2014-03-25 26 views
5

我在創建一個Rails應用程序,我必須區分主頁的標題。Rails,在主頁上呈現不同的標題

我已經創建了一個帶有_home_header版本和_header版本的部分,以便在每個頁面中使用,但是我不知道如何管理這些更改。

標題包含在我的佈局中,併爲每個頁面呈現相同的佈局。當我請求主頁時,如何告訴「佈局」使用_home_header版本而不是標準版本?

+0

你可以在主頁的視圖中使用content_for嗎? http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for – katzmopolitan

回答

10

我會用current_page?助手,並期待在root_path

# app/views/layouts/application.html.erb 
<% if current_page?(root_path) %> 
    <%= render 'layouts/home_header' %> 
<% else %> 
    <%= render 'layouts/header' %> 
<% end %> 
0

通常,您可以在控制器特定的子目錄中添加更多特定版本的頁面。

也就是說,如果你有一個佈局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會加載更「特定」的頭文件。

+0

我知道,但我必須在每個視圖中添加默認版本...我只需要覆蓋頭時,我加載主頁。 –

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><%[email protected]%></title> 

他的解決方案的明亮部分是所有文本保存在視圖文件中,這是有道理的。不那麼明亮的部分是難以遵循的。

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 %> 
相關問題