2013-04-30 73 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 %> 
相关问题