1

我使我的主要顶部导航在一个循环中的Rails 3凸显轨道3当前页:通过ID

<ul> 
<% Placement.all.each do |placement| %> 
    <li><%= link_to placement.placementname, placement_path(placement.id)%> </li> 
<%end%> 
</ul> 

我怎样才能突出显示当前位置的背景基于URL中的ID?网址如下:
本地主机:3000 /展示位置/ 1
本地主机:3000 /展示位置/ 2
...

一旦用户点击了一个第二导航栏会出现在其中一个标签左边。这是我如何渲染它:

<% @placement.ads.all.each do |ad| %> 
    <li><%= link_to ad.adname, placement_ad_path(@placement, ad) %> </li> 
<%end%> 

如何突出显示当前广告的背景基于url中的id?网址如下:本地主机:3000 /展示位置/ 1 /广告/ 1
本地主机:3000 /展示位置/ 2 /广告/ 3
...

回答

1
<ul> 
<% Placement.all.each do |placement| %> 
    <li class=<%= "highlighted" if placement.id==params[:id].to_i %>> 
     <%= link_to placement.placementname, placement_path(placement.id)%> </li> 
<%end%> 
</ul> 

<% @placement.ads.all.each do |ad| %> 
    <li class=<%= "highlighted" if ad.id==params[:id].to_i %>> 
    <%= link_to ad.adname, placement_ad_path(@placement, ad) %> </li> 
<%end%> 
+0

非常感谢。这工作。什么是“.to_i”?没有它,它就无法工作。 – Farhadam

+0

实际上,一旦我在广告上导航并将网址更改为'placement/1/ad/5',placement.id取5而不是1,然后我用placement.id替换了您的代码。== == params [:placement_id]但它只适用于当我在广告(palcement/1/ads/4)的show.html.erb中,但它不适用于展示位置(展示位置/ 1)的展示视图,因为在展示位置展示中它需要看起来为params [:id]而不是params [:placement_id]。你知道如何解决这个问题吗? – Farhadam

+0

啊,这样解决了:<%if params [:controller] ==“placementments”%>

    <%Placement.all.each do | placement | %>
  • ><%= link_to placement.placementname,placement_path(placement.id)%>
  • <%end%>
<%else%>
    <%Placement.all.each do | placement | %> ><%=的link_to placement.placementname,placement_path(placement.id)%><%end%>
<%end%> – Farhadam

0

使用样式表和类名的选择性应用。假设你已经设置你的控制器@placement@ad,我会做这样的事情:

<ul class="placements"> 
<% Placement.all.each do |placement| %> 
    <li class="placement <%= 'selected' if placement == @placement %>"> 
     <%= link_to placement.name, placement %> 
    </li> 
<% end %> 
</ul> 

<ul class="ads"> 
<% @placement.ads.each do |ad| %> 
    <li class="ad <%= 'selected' if ad == @ad %>"> 
     <%= link_to ad.name, [@placement, ad] %> 
    </li> 
<% end %> 

然后你可以把这样的事情到您的样式表。 (在这里我假设SCSS以下。)

.placements { 
    .placement { 
     // Normal styling goes here 

     &.selected { 
      // Extra styles for selected items go here 
     } 
    } 
} 
1

您可以使用params哈希表检索IDS,比较它们和附加CSS类到LIS:

<ul> 
<% Placement.all.each do |placement| %> 
    <li class="<%= 'highlighted' if placement.id==params[:id] %>"><%= link_to placement.placementname, placement_path(placement.id)%> </li> 
<%end%> 
</ul> 

<% @placement.ads.all.each do |ad| %> 
    <li class="<%= 'highlighted' if ad.id==params[:id] %>"><%= link_to ad.adname, placement_ad_path(@placement, ad) %> </li> 
<%end%> 
在样式表

然后声明CSS类:

.highlighted{ background-color: #f00;} /* Whatever color fits your needs */ 
+0

感谢杰夫。我从字面上复制粘贴你的答案,但没有改变,甚至没有错误!我只是做了一个测试,看看它是否真的下降'高亮'在类中运行此代码:

    <%Placement.all.each do | placement | %>
  • <%= '突出' 如果placement.id == PARAMS [:ID]%>
  • <%end%>
但结果在浏览器是空的,不显示字母突出显示。你知道为什么吗?我测试它的网址是localhost:3000/placements/1 – Farhadam