2012-02-18 17 views
36

Tengo un formulario que está usando form_tag y no estoy seguro de cómo usarlo con el simple_form gem. Así es como se ve mi formulario:¿Form_tag funciona 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 %> 

¿Se puede hacer? ¿Cómo cambiaría un form_tag para usar simple_form correctamente? ¿Qué pasa cuando se usa con fields_for? Un novato podría necesitar algo de ayuda.

Gracias.

Respuesta

16

simple_form es un contenedor alrededor de form_for, no form_tag. Puede usar simple_form_for en lugar de form_for, pero form_tag solo crea etiquetas <form> con contenido especificado, no es relevante para la forma simple.

131

Puede usar simple_form incluso si no está creando un formulario vinculado a un modelo.

tomar esta forma signin como ejemplo:

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

que generará params como las siguientes:

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

En su controlador puede hacer referencia a los campos de formulario usando:

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

muchas gracias. Eso es exactamente lo que necesito. – gotqn

+0

Gracias. Ayudame mucho – zires

+0

¡Muchas gracias! Estuve con este problema por 2 horas y me salvaste. ¡Gracias! – Blaze

5

Puede evitar el uso de

params[:signin][:email] 

usando

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

por lo

params[:email] 
+0

¡Esto es lo que necesitaba! – ngoue

1

como @barelyknown dijo que se puede utilizar incluso sin simple_form modelo También puede utilizar 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 %> 
Cuestiones relacionadas