2008-09-21 7 views
26

Ich möchte ein verstecktes Feld erstellen und erstellen Sie einen Link in einem Helfer und dann beide auf meine erb ausgeben.Was ist der beste Weg, um mehrere Tags von einem Rails Helper zurückzugeben?

<%= my_cool_helper "something", form %> 

Sollte löschte die Ergebnisse der

link_to "something", a_path 
form.hidden_field "something".tableize, :value => "something" 

Was die Definition des Helfers aussehen würde? Die Details von was link_to und das form.hidden_field sind nicht wirklich wichtig. Was zählt, ist, wie gebe ich die Ausgabe von zwei verschiedenen Anrufen zurück.

+1

nicht vergessen, dass [seit Rails 3] (http://railscasts.com/episodes/204-xss-protection-in-rails-3?view=asciicast) benötigen Sie Strings markieren als 'html_safe 'um XSS-Attacken zu vermeiden. – asymmetric

Antwort

23

Es gibt mehrere Möglichkeiten, dies zu tun.

Denken Sie daran, dass die vorhandenen Schienen Helfer wie link_to usw. nur Strings ausgeben. Sie können die Strings miteinander verketten und zurückgeben (was ich meistens tue, wenn die Dinge einfach sind).

Beispiel:

link_to("something", something_path) + #NOTE THE PLUS FOR STRING CONCAT 
form.hidden_field('something'.tableize, :value=>'something') 

Wenn Sie die Dinge tun, die komplizierter sind, können Sie diesen Code in einem Teil gerade auf, und lassen Sie Ihre Helfer Anruf render :partial.

Wenn Sie kompliziertere Sachen als auch zu tun, dass, dann möchten Sie vielleicht bei errtheblog des block_to_partial Helfer suchen, was ziemlich cool ist

+0

Schöne und einfache Antwort! Plus FTW! – Sixty4Bit

10

Bisher ist die beste, die ich mit kommen haben, ist:

def my_cool_helper(name, form) 
    out = capture { link_to name, a_path } 
    out << capture { form.hidden_field name.tableize, value => 'something' } 
end 

Gibt es einen besseren Weg?

+0

Ihre Antwort hilft mir sehr. Vielen Dank! –

Verwandte Themen