Как сделать условие для класса HAML в ruby

У меня есть страница с вкладками A, B и C, каждая из которых содержит список «вещей». Когда я создаю новую «вещь», я указываю, является ли она частью списка A, B или C. Я хотел бы, чтобы соответствующий тег был активен после сохранения новой «вещи» и обновления страницы.

Вот мои вкладки HAML

%ul.nav.nav-tabs
  %li.active 
    %a{href:"#a", :"data-toggle" => "tab"}
      "A things"
  %li
    %a{href:"#b", :"data-toggle" => "tab"}
      "B things"
  %li
    %a{href:"#c", :"data-toggle" => "tab"}
      "C things"

.tab-content
  #a.tab-pane.fade.in.active
    "tab data"
  #b.tab-pane.fade.in
    "tab data"
  #c.tab-pane.fade.in
    "tab data"

Как я могу написать условие ruby, которое поместит класс active, который в настоящее время жестко закодирован на вкладке «a», на вкладке, на которую я только что добавил данные?


person Dear1ofGdBear    schedule 09.04.2015    source источник
comment
являются объектами a, b и c, которые мы можем повторять? или просто строки как меню? потому что, если это так, это можно сделать как помощник в цикле, и все   -  person Mohammad AbuShady    schedule 09.04.2015


Ответы (1)


Что-то типа:

Контроллер:

class ThingsController < ActionController::Base
  def create
    @active_tab = *some logic to get the tab*
    # create logic
  end
end

Вид:

%ul.nav.nav-tabs
  %li{class: @active_tab.nil? || @active_tab == "A" ? "active : ""}
    %a{href:"#a", :"data-toggle" => "tab"}
      "A things"
  %li{class: @active_tab == "B" ? "active : ""}
    %a{href:"#b", :"data-toggle" => "tab"}
      "B things"
  %li{class: @active_tab == "C" ? "active : ""}
    %a{href:"#c", :"data-toggle" => "tab"}
      "C things"
.tab-content
  %a.tab-pane.fade.in{class: @active_tab.nil? || @active_tab == "A" ? "active : ""}
    "tab data"
  %b.tab-pane.fade.in{class: @active_tab == "B" ? "active : ""}
    "tab data"
  %c.tab-pane.fade.in{class: @active_tab == "C" ? "active : ""}
    "tab data"

Хотя будет лучше работать с массивом.

person DickieBoy    schedule 09.04.2015
comment
благодарю вас. Можете ли вы предложить конкретную логику контроллера? - person Dear1ofGdBear; 09.04.2015
comment
Когда я создаю новую «вещь», я указываю, является ли она частью списка A, B или C. Я полагаю, что это какой-то столбец? Настроить на это? - person DickieBoy; 09.04.2015
comment
Лучшим условием для класса было бы class: ('active' if @active_tab == 'A') - person Mohammad AbuShady; 10.04.2015
comment
да @MohammadAbuShady, это то, что я придумал, основываясь на предложении DickieBoys, и это самый ясный способ написать это. Спасибо - person Dear1ofGdBear; 13.04.2015