2010-12-16 7 views
0

Ich erstelle eine Reihe von Links in einer Menüleiste in meiner App. Wenn der Benutzer eine der Seiten der Menüleiste anzeigt, möchte ich, dass sich der Stil ändert, um anzuzeigen, dass er die aktuelle Seite anzeigt. Es ist eine ziemlich einfache Aufgabe, dass ich arbeite.Wie füge ich HTML-Optionen hinzu, nachdem die Verknüpfung mit link_to generiert wurde?

Was ich tun möchte, ist meine Helfer abzutrocknen. Ich baue die Links wie so:

link_to('events', :controller => 'event_sections', :action => 'show', :group_id => @group), :class => "current_page_item"

ich mich viel mit dem ich zu wiederholen ‚wenn aktuell Seite‘ Code. Ich habe mich gefragt, ob es einen guten Weg gibt, zuerst alle benötigten Links zu erstellen und dann das: class => "current_page_item" hinzuzufügen.

Antwort

1

link_to übernimmt URL-Optionen und HTML-Optionen. Sie können sie nur in ihren eigenen Hash setzen

link_to('events', :controller => 'event_sections', :action => 'show', :group_id => @group), :class => "current_page_item"

Becomes:

link_to'events', {:controller => 'event_sections', :action => 'show', :group_id => @group}, :class => "current_page_item"

Beachten Sie die neue {} um den Controller Weg.

1

Es hängt davon ab, wie komplex Ihre "if current page" Logik ist, nehme ich an. Ich schaffe normalerweise eine einfache Helfer wie diese den Namen des Controllers zu verwenden und den Link-Text, um zu entscheiden, ob der Link ‚aktuell‘ ist:

def tab(name, link) 
    css_class = (controller.controller_name.humanize =~ /#{name}/i ? "current_page_item" : "page_item") 
    link_to name, link, :class => css_class 
end 

Dann können Sie diese anstelle von link_to in dem Sie Ihre Tabs sind die Schaffung :

= tab "Events", :controller => 'event_sections', :action => 'show', :group_id => @group 
1

ich es auf eine andere Art und Weise nähern würde: was ist eine Variable wie @current_page_name in Ihrem Controller-Einstellung (jede Aktion gesetzt, es würde) und dann vor der Zugabe der Klasse diese Variable überprüfen alle Ihre link_tos würde.

Dann, um es noch mehr zu trocknen, könnten Sie eine partielle oder eine Funktion erstellen, die um Ihre link_to wickeln würde (und ich sehe, dass idlefingers gerade eine ähnliche Antwort gepostet).

Verwandte Themen