2012-02-18 2 views
36

Ho un modulo che utilizza form_tag e non so come usarlo con simple_form gem. Ecco come appare il mio aspetto:Il form_tag funziona con Simple_form?

<%= form_tag create_multiple_prices_path, :method => :post do %> 

    <% @prices.each_with_index do |price, index| %> 
    <%= fields_for "prices[#{index}]", price do |up| %> 
     <%= render "fields", :f => up %> 
    <% end %> 
    <% end %> 

    <%= submit_tag "Done" %> 
<% end %> 

Si può fare? Come cambierebbe un form_tag per usare simple_form correttamente? Che dire quando lo si utilizza con fields_for? Un principiante potrebbe usare un po 'di aiuto.

Grazie.

risposta

16

simple_form è un wrapper form_for, non form_tag. È possibile utilizzare simple_form_for anziché form_for, ma form_tag crea solo tag <form> con contenuto specificato, non è rilevante per il modulo semplice.

131

È possibile utilizzare simple_form anche se non si sta creando un modulo collegato a un modello.

Prendete questo modulo signin come esempio:

<%= simple_form_for :signin, { url: signin_path } do |f| %> 
    <%= f.input :email %> 
    <%= f.input :password %> 
    <%= f.button :submit, "Sign In" %> 
<% end %> 

che genererà params come la seguente:

{ 
    ... 
    "signin" => { 
    "email"=>"[email protected]", 
    "password"=>"[FILTERED]"}, 
    "commit"=>"Sign In" 
    } 
} 

nel controller è possibile fare riferimento i campi del modulo utilizzando:

params[:signin][:email] ... 
+0

Grazie mille. Questo è esattamente ciò di cui ho bisogno. – gotqn

+0

Grazie. Aiutami molto. – zires

+0

Grazie mille! Ero con questo problema di 2 ore e mi hai salvato. Grazie! – Blaze

5

È possibile evitare l'uso di

params[:signin][:email] 

utilizzando

<%= f.input :email, input_html: { name: "email" } %> 

così

params[:email] 
+0

Questo è ciò di cui avevo bisogno! – ngoue

1

come @barelyknown detto che si può utilizzare anche senza simple_form modello È inoltre possibile utilizzare field_for o simple_field_for

<%= simple_form_for :transaction_limits, {url: create_multiple_prices_path, method: :post} do |f| %> 
    <% @prices.each_with_index do |price, index| %> 
    <%= f.fields_for "prices[#{index}]", price do |up| %> 
     <%= render "fields", :f => up %> 
    <% end %> 
    <% end %> 

    <%= f.submit "button" %> 
<% end %>