2016-04-13 6 views
0

ich ein paar partials habe zu zeigen - ein für ein Hauptmenü, eine andere für ein Untermenü usw.Konsolidieren ein großes if/else Listenelemente aktiv oder inaktiv Menü

Eines, was ich für eine lange Zeit gewundert . Ich weiß, wie man aktive Menüpunkte markiert, aber werfen Sie einen Blick auf dieses Beispiel:

ul.menu-list 
    li 
     - if action_name == 'change_password' 
     a.is-active href="/#{session[:user_type]}/account/change_password" Change Password 
     - else 
     a href="/#{session[:user_type]}/account/change_password" Change Password 
    li 
     - if action_name == 'change_cell' 
     a.is-active href="/#{session[:user_type]}/account/change_cell" Update Contact Number 
     - else 
     a href="/#{session[:user_type]}/account/change_cell" Update Contact Number 
    li 
     - if action_name == 'change_email' 
     a.is-active href="/#{session[:user_type]}/account/change_email" Update Email 
     - else 
     a href="/#{session[:user_type]}/account/change_email" Update Email 
    li 
     - if action_name == 'change_notifications' 
     a.is-active href="/#{session[:user_type]}/account/change_notifications" Update Notification Settings 
     - else 
     a href="/#{session[:user_type]}/account/change_notifications" Update Notification Settings 

Es ist eine verrückte if/sonst Fest. Bestimmte Aktionsschaltflächen (Widget bearbeiten, Widget löschen) nur für bestimmte Benutzertypen verfügbar. Das würde dem, was Sie hier sehen, eine weitere lächerliche Komplexität hinzufügen.

Was mache ich hier falsch?

Antwort

0

Setzen Sie einfach die Logik, um Helfer anzuzeigen. Für zB:

module MyHelper 
    ACTION_TO_STRING = { 
    change_password: 'Change Password', 
    change_cell: 'Update Contact Number', 
    change_email: 'Update Email', 
    change_notifications: 'Update Notification Settings' 
    } 

    def menu_list_from(action_name, user_type) 
    content_tag(:ul, class: 'menu-list') do 
     ACTION_TO_STRING.each do |k, v| 
     klass = k == action_name.to_sym ? 'is-active' : '' 
     concat content_tag(:li) do 
      link_to v, "/#{user_type}/account/#{k}", class: klass 
     end 
     end 
    end 
    end 
end 

Dann ist es nur in der Ansicht verwenden

= menu_list_from(action_name, session[:user_type])