So fügen Sie HTML-IDs zu Rails form_tag hinzu

77

Ich verwende Rails 2.2.2 und möchte dem vom form_tag generierten HTML-Formularcode eine ID hinzufügen.

<% form_tag session_path do -%>      
<% end -%>

Derzeit produziert:

<form action="/session" method="post">
</form>

Möchte es produzieren:

<form id="login_form" action="/session" method="post">
</form>

Die API ist nicht wirklich eine Hilfe und ich habe versucht, verschiedene Kombinationen von hinzuzufügen

:html => {:id => 'login_form'}

ohne Glück.

Kennzeichen
quelle

Antworten:

101

Für <element>_tagSie festlegen , HTML - Attribute direkt, wie folgt:

<% form_tag session_path, :id => 'elm_id', :class => 'elm_class',
                          :style => 'elm_style' do -%>
   ...
<% end -%>

Für Konstrukte müssen Sie die HTML-Attribute innerhalb einer Karte verschieben:<element>_remote_tag:html

<% form_tag form_remote_tag :url => session_path, :html => {
                            :id => 'elm_id', :class => 'elm_class',
                            :style => 'elm_style' } do -%>
   ...
<% end -%>
vladr
quelle
28

Dieser Code

form_tag(:controller => "people", :action => "search", :method => "get", :class => "nifty_form")

als Ergebnis geben:

<form accept-charset="UTF-8" action="/people/search?method=get&class=nifty_form" method="post">

Aber wenn Sie diese Struktur verwenden

form_tag({:controller => "people", :action => "search"}, :method => "get", :class => "nifty_form")

Sie erhalten als Ergebnis

<form accept-charset="UTF-8" action="/people/search" method="get" class="nifty_form">

und es ist genau das, was Sie wollen

Kirill Warp
quelle
Du denkst? Versuchen Sie auch, die Antwort ein wenig zu erklären, da nur Code-Antworten nicht die besten sind.
random_user_name
1
Das ist kein Problem. Und ja, ich denke :) Wenn Sie eine Klasse, eine Methode oder etwas anderes hinzufügen möchten, um ein Tag zu bilden, müssen Sie nur Ihren Controller packen und eine Aktion wie diese ausführen: {: controller => "people" ,: action => "search"} Alle Ihre Parameter nach dieser Struktur werden funktionieren, wenn sie relevant sind
Kirill Warp
Das hat mir wirklich geholfen. Vielen Dank @Kirill Warp
Robert Travis Pierce
3
<% form_tag 'session_path', :id => 'asdf' do -%>      
<% end -%>

Erzeugt

   <form action="session_path" id="asdf" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="ed5c62c836d9ba47bb6f74b60e70280924f49b06" /></div>
   </form>
Dutow
quelle
0

In meinem Fall musste ich in HTML - Optionen setzen , {}um tatsächlich hinzufügen idzu form_tag, wie folgt aus :

<%= form_tag(some_update_path(@some_record), { method: :put, id: "some-id" }) do <% end %>

Ivica Lakatoš
quelle