【问题标题】:highlight current page in rails 3 by id按 id 突出显示 rails 3 中的当前页面
【发布时间】:2013-01-01 20:10:27
【问题描述】:

我在 Rails 3 中循环渲染我的主要顶部导航:

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

如何根据 url 中的 id 突出显示当前展示位置的背景?网址如下所示:
本地主机:3000/placements/1
本地主机:3000/placements/2
...

一旦用户单击其中一个选项卡,左侧就会出现第二个导航栏。这就是我渲染它的方式:

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

如何根据 url 中的 id 突出显示当前广告的背景?网址如下所示:localhost:3000/placements/1/ads/1
本地主机:3000/placements/2/ads/3
...

【问题讨论】:

    标签: css ruby-on-rails uinavigationbar background-color highlight


    【解决方案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%>
    

    【讨论】:

    • 非常感谢。这行得通。 “.to_i”到底是什么?没有它就行不通。
    • 实际上是一个问题,一旦我在广告上导航并且网址更改为“placement/1/ad/5”,placement.id 占用 5 而不是 1。然后我用placement.id 替换了您的代码==params[:placement_id] 但它只在我在广告的 show.html.erb 中有效(palcement/1/ads/4),但它在展示位置的显示视图中有效(placement/1),因为在展示位置显示它需要查找 params[:id] 而不是 params[:placement_id]。你知道怎么解决吗?
    • 啊,这样解决了:
      • >
      • >
    【解决方案2】:

    使用样式表和选择性地应用类名。假设您已经在控制器中设置了 @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 或 LESS。)

    .placements {
        .placement {
            // Normal styling goes here
    
            &.selected {
                // Extra styles for selected items go here
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用 params 哈希来检索 id,比较它们并将 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 */
      

      【讨论】:

      • 谢谢杰夫。我从字面上复制粘贴了您的答案,但没有任何改变,甚至没有错误!我刚刚做了一个测试,看看它是否真的通过运行以下代码在课堂上“突出显示”:
        但是我浏览器中的结果是空的,不显示突出显示的字母。你知道为什么吗?我正在测试它的 url 是 localhost:3000/placements/1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多