Aunque es posible crear manualmente los formularios para crear y editar recursos, Rails trae unos métodos de ayuda que te van a permitir reutilizar y escribir menos código.
Para crear un formulario asociado a un modelo utiliza form_for
. Por ejemplo, asumiendo que estamos creando el formulario para la siguiente acción new:
def new
@product = Product.new
end
Podemos utilizar form_for
para crear un formulario asociado al modelo @product
en la vista:
<%= form_for @product do |f| %>
Acá van los campos del formulario
<% end %>
Si @product
es un nuevo registro se crea un formulario a la ruta POST /products
.
Si @product
ya está persistido en la base de datos se crea un formulario a la ruta PATCH /products/:id
.
Eso quiere decir que podemos reutilizar el mismo código tanto para crear como para actualizar los registros.
Rails viene con unos métodos de ayuda para crear los campos del formulario. Aunque es posible crearlos manualmente con HTML, los métodos se encargan del nombramiento y asociar el campo al valor que está en el modelo.
<%= form_for @product do |f| %>
<div>
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<%= f.submit %>
<% end %>
Los campos se crean utilizando la variable que se le pasó en el bloque del form_for
, en este caso f
.
label
se utiliza para crear una etiqueta <label>
asociada al campo.
text_field
se utiliza para crear una etiqueta de tipo <input type="text">
.
submit
se utiliza para crear un botón de submit <input type="submit">
cuyo texto puede ser "Create Product" o "Update Product" dependiendo si el registro está ya creado o no.
Otros campos de entrada incluyen:
-
text_area
- crea un área de texto:<%= f.text_area :description, rows: 20 %>
-
check_box
crea una caja de selección:<%= f.check_box :paid %>
-
date_field
-
password_field
-
radio_button
- crea un botón de radio:<%= f.radio_button :gender, "male" %> <%= f.radio_button :gender, "female" %> `
-
hidden_field
- crea un campo oculto -
email_field
- crea un campo de email -
url_field
- crea un campo de URL -
collection_select
- crea una lista desplegable<%= f.collection_select(:city_id, City.all, :id, :name) %>
En algunas ocasiones vas a querer crear formularios que no están asociados a ningún modelo. Por ejemplo, para crear un formulario de búsqueda.
Para eso existe el método de ayuda form_tag
y los campos que terminan en _tag
:
<%= form_tag("/search", method: "get") do %>
<%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search") %>
<% end %>
Si quieres aprender más sobre formularios de búsqueda y cómo implementaros te recomendamos este post en el blog de Make it Real: https://blog.makeitreal.camp/formularios-de-busqueda-en-rails/