SimpleForm es una gema de Ruby que proporciona un enfoque simplificado y eficiente para construir formularios HTML en aplicaciones Rails. Al igual que la popular gema Hamel, SimpleForm agiliza el desarrollo al integrar los formularios con la estructura de modelo, vista y controlador de Rails. Esta herramienta permite reducir la cantidad de código necesario para crear formularios, mejorando así la legibilidad y mantenimiento del mismo.
¿Cómo se instala SimpleForm?
Para instalar SimpleForm en tu proyecto Rails, debes seguir estos pasos:
Agregar la gema al Gemfile: Incluye la línea gem 'simple_form' en tu archivo Gemfile.
Ejecutar el bundle install: Ve a la consola y detén el servidor si está corriendo. Ejecuta el comando bundle install o su alias bi.
Configuración inicial: Utiliza el comando rails generate simple_form:install en la consola. Esto generará archivos de configuración y plantillas necesarias para su funcionamiento.
Aquellos habituados a trabajar con HTML y Rails encontrarán que SimpleForm facilita la integración de formularios avanzados con menos esfuerzo.
¿Cómo genera scaffolds SimpleForm?
Al generar un nuevo scaffold utilizando SimpleForm y Hamel, el proceso difiere del enfoque tradicional con ERB. Un scaffold es un conjunto de archivos que ayudan a modelar, controlar y visualizar un elemento en la aplicación Rails:
Crear un nuevo modelo: Por ejemplo, al crear un modelo User, puedes definir atributos tales como first_name, last_name, address, y about_me, cada uno con su tipo de datos correspondiente.
rails generate scaffold User first_name:string last_name:string address:string about_me:text phone:integer
Utiliza Hamel en lugar de ERB: Las vistas generadas adoptarán el lenguaje de plantillas Hamel que reducen el número de líneas de código significativamente. Mientras un archivo ERB podría tener unas 42 líneas, el mismo archivo en Hamel podría tener tan solo 14.
¿Cuáles son las ventajas de utilizar Hamel con SimpleForm?
Hamel ofrece una estructura más limpia y legible en comparación con ERB:
Elimina la necesidad de cerrar etiquetas HTML, ya que emplea la indentación.
Simplifica la sintaxis para clases y etiquetas comunes, como div, mejorando la claridad.
Un ejemplo sencillo de cómo una etiqueta div se estructura en Hamel elimina el porcentaje de apertura para clases, optimizando la legibilidad.
Ejemplo de código Hamel vs. ERB
ERB HTML
<div class="my-class">
<h1>Título</h1>
</div>
Hamel
.my-class
%h1 Título
¿Cómo se personalizan los formularios con SimpleForm?
SimpleForm no solo simplifica la creación de formularios sino que permite personalizaciones avanzadas:
Etiquetas personalizadas: Cambiar una etiqueta es tan simple como añadir el parámetro label.
= f.input :first_name,label:"Nombres"
Tipos de campo personalizados: Puedes definir diferentes tipos de input, como text o textarea.
= f.input :about_me,as::text
Rails reconoce automáticamente los tipos de datos de los atributos, por lo que un campo about_me definido como text se renderiza automáticamente como textarea.
¿Cuáles son las aplicaciones prácticas de SimpleForm?
SimpleForm es especialmente útil cuando se requiere:
Interacción intensiva con datos: Interfaces como selección de países o listas de opciones donde simplifica la creación de selectores.
Formularios complejos y dinámicos: Proporciona estructuras enriquecidas, segura integración con el modelo e interacción mejorada.
La flexibilidad que SimpleForm ofrece en el diseño de formularios hace más eficiente el desarrollo en Rails. Te animo a que integres Hamel y SimpleForm juntos para aprovechar al máximo sus beneficios. Esto no solo mejorará tu productividad, sino que también te permitirá crear aplicaciones más robustas y adaptables.
Creación de Formularios Dinámicos con SimpleForm y Haml en Rails
Como cuando no tienes internet y se arregla apagando y prendiendo el modem jajajaj. Gracias por el aporte!
La forma más rápida para generar las vistas con el modelo Book seria:
1.- Borrar la carpeta las vistas de books
2.- Volver a correr el comando del scaffold con flags especificas:
rails g scaffold Book title author description:text isbn page_count:integer --migration=false--skip --force
Y listo....el comando anterior nos crearía solo los archivos faltantes, que en este caso son las vistas.
Hola Joel, mas que un error, este comportamiento puede estar asociado al orden en el que has ejecutado tus comandos, form_for es el helper que tiene rails por defecto denominado como un constructor de formulariosform builder , simple_for mejora las prestaciones de este helper y te ayuda a escribir formularios más rápidos (recuerda que al final, todo se convierte en HTML). también ten en cuenta que las vistas ya generadas (antes de la instalación de la gema) no cambiaran después de instalar la gema simple_form. por lo que debes hacer el proceso manual o volver a ejecutar el generador. Recuerda también correr el comando bundle install y asegurarte que el comando rails generate simple_form:install no haya tenido errores, estos dos últimos comandos sólo se corren una vez. Podrías intentar haciendo un scaffold simple de un modelo aleatorio algo como rails g scaffold Foo bar:string y revisar si tus vistas están con simple form y con haml, para deshacer el scaffold puedes usar rails destroy scaffold Foo bar:string , me cuentas cómo te va...
Simple Form es una dependencia que ayuda con la creación de formulario manteniendo la estructura MVC.
Para instalar la gema hay que añadir gem 'simple-form' a la lista de dependencias en el Gemfile y después ejecutar el comando bundle install
Una vez instalado hay que ejecutar el comando rails g simple_form:install para que la dependencia se configure con una serie de plantillas y un inicializador.
Este comando crea tres archivos: el inicializador, que es una pre configuración de la librería; el archivo de internacionalización, y la plantilla del formulario que para generar los scaffolds utilizando haml.
Al crear un nuevo scaffold se aprecia que para la creación de las vistas ya no utilizó erb, sino haml.
Al comparar las plantillas generadas con haml con las previamente generadas con erb, se observa que las de haml tienen una estructura mucho más limpia y fácil de leer con muchas menos líneas de código.
Existen conversores de HAML a HTML, en caso de que usar la nueva sintaxis se dificulte.
Vale realmente la pena usar simple_forms en vez de form_for? Si bien con simple_form la sintaxis es mas sencilla, ¿puede esto traerme algun tipo de problemas a futuro?
Hola Sebastian, simple_form es una tecnología que te ayudará a mejorar la legibilidad, acelerar el proceso de desarrollo e integrarte con soluciones frontend de la comunidad.
Al igual que HAML su uso es opcional, y es posible que para casos muy específicos debas usar otras tecnologías, debes además saber que puedes seguir usando form_for al mismo tiempo que usas simple_form, e incluso en la misma vista si así lo deseas, así que es fácilmente combinable con otras alternativas de construcción de formularios hasta con el mismo HTML puro.
➜ mi_first_app git:(master) ✗ rails generate simple_form:install
Running via Spring preloader in process 12209
Could not find generator 'simple_form:install'.
Run bin/rails generate --help for more options.
Rengo ese error, alguien sabe cómo solucionarlo?
Hola, para este caso el generador está enlazado a la gema, debes asegurarte que la gema 'simple_form' esté en el Gemfile (y que además el archivo esté guardado), y luego asegurate de que hayas ejecutado el $ bundle install
Hola, no entendi la tarea de migrar de books con extensión erb a books con haml y simpleform , tengo entendido que una vez instaladas las gemas ya solo es volver a generar el scafold por lo tanto intente sobreescribir books pero no funciono.
> rails g scaffold Book title :string description:text isbn:string page_count:integer
Running via Spring preloader in process 10949 invoke active_record
The name 'Book' is either already used in your application or reserved by Ruby on Rails.Please choose an alternative or use --force to skip this check and run this generator again.
la gema hamlit-rails se encarga de hacer esta configuración de forma automática, aunque se puede sobre-escribir esta configuración facilmente en el archivo config/application.rb usando config.generators.template_engine :haml
podrías usar la configuración que te menciono en el punto 1, o también podrías ecribir tu comando scaffolld de la siguiente forma rails g scaffold Foo name:string --template-engine=erb esto asume que estamos creando un modelo Foo con un campo name.
Esta fue mi manera de solucionar el cambio de HTML/ERB a HAML:
=simple_form_for(@book)do|f|-if book.errors.any? #error_explanation
%h2
=pluralize(book.errors.count,"error") prohibited this book from being saved:%ul
- book.errors.eachdo|error|%li= error.full_message.form-inputs
= f.input:title,label:'Titulo'= f.input:author,label:'Autor'= f.input:description,label:'Descripccion'= f.input:isbn,label:'ID'= f.input:page_count,label:'Cantidad de paginas'.form-actions
= f.button:submit
Tuve que modificar una parte, para poder instalar Simple Form, en la siguiente direcciòn: https://rubygems.org/gems/simple_form/version/5.1.0, hay un campo de nombre GEMFILE copiar el contenido y pegarlo en el GEMFILE
gem 'simple_form', '~> 5.1'
al especificar la versiòn ya me dejo instalarlo con.