2013-04-30 72 views
1

我需要做的事很簡單,但一個優雅的方式是逃避我,因爲我是Rails的noob。基本上,我需要根據當前顯示的視圖來更改駐留在application.html.erb文件中的body標記的class屬性。在Rails中根據當前視圖/控制器更改類屬性?

所以,我的索引網頁上這將是:

<body class="pull_top"> 

但其他任何網頁(到目前爲止)上,它將是

<body> 

我首先想到的是把它添加到application_helper.rb

def body_class 
    default_class = "" 
    if current_page?(controller: 'index') 
     default_class = "pull_top" 
    end 
    default_class 
    end 

然後做

<body class="<%= body_class %>"> 

但隨後在指數之外的所有其他網頁我想最終

<body class=""> 

我想避免。

回答

0
<body <%= controller_name == 'index' ? "class='pull_top'" : '' %>> 
+0

聽說的地方,它的壞形式把邏輯放在你的觀點上。這就是爲什麼我避開它。 – 2013-04-30 05:15:30

+0

你可以移動這個controller_name =='index'? 「class ='pull_top'」:''到輔助方法。我只是向你展示一個解決方案。 – 2013-04-30 05:18:16

0

在我看來結束了:

<body class=""> 

是不是一個真正的大問題。該邏輯被封裝在幫助器中,您仍然可以爲<body>標記添加額外的類,這些類可以應用於您所描述的兩種場景。例如:

<body class="<%= body_class %> pretty_style another_style"> 

希望這有助於!

0

你可以把你的application.html.erb如下:

<body class="<%= yield :body_class %>"> 
... 
</body> 

,然後在你的具體看法,你真正想要的類:

provide(:body_class, 'whatever-you-want') 
0

如何:

def body_class 
    default_class = nil 
    if current_page?(controller: 'index') 
    default_class = "pull_top" 
    end 
    default_class 
end 

查看:

<body<%= " class=\"#{body_class}\"" if body_class %>> 

這裏body_class會被調用兩次問題

0

你可以把if語句,如果存在比body_class應用類,否則,你可以離開它,因爲它是這樣的:

<% if body_class.present? %> 
    <body class="<%= body_class %>"> 
<% else %> 
    <body> 
<% end %> 
相關問題