Probando action text en rails 6
¿Qué es actiontext?
Actiontext es una componete de rails 6 que nos permite crear y editar texto enriquecido de forma sencilla, esto nos puede servir para crear un blog, agregar comentarios de usuarios o incluso enviar un mail.
Creando un blog con actiontext
Instalamos Rails 6 beta 6.0.0.beta1
gem install actiontext-6.0.0.beta1
Creamos un proyecto para nuestro blog con rails 6
rails _6.0.0.beta1_ new blog --pre --database=postgresql
Añadimos la gema image_processing para los previews de las imágenes que subiremos
gem 'image_processing', '-> 1.2'
Luego ejecutamos bundle
en el terminal.
El siguiente paso consiste en instalar action_text, esto lo logramos ejecutando en el terminal en la carpeta del proyecto:
rails action_text:install
Obtendremos como resultado
Adding trix to app/javascript/packs/application.js append app/javascript/packs/application.js Adding @rails/actiontext to app/javascript/packs/application.js append app/javascript/packs/application.js Copied migration 20190123044227_create_active_storage_tables.active_storage.rb from active_storage Copied migration 20190123044228_create_action_text_tables.action_text.rb from action_text
Veremos que se agregó el editor trix (escrito en JS) a nuestros archivos js, además se generaron dos migraciones. Podemos correr las migraciones con:
rails db:migrate
Luego crearemos un scaffold de artículo donde subiremos el contenido, aquí solo agregaremos el título.
rails g scaffold post title
Nuevamente corremos las migraciones con:
rails db:migrate
Luego agregaremos al modelo de post el método de clase has_rich_text
has_rich_text :content
Agregaremos a la vista parcial views/posts/_form.html.erb
dentro del bloque del form un campo de texto con:
<div class="field"> <%= form.label :content %> <%= form.rich_text_area :content %> </div>
Para poder guardar el valor en la base de datos tenemos que asegurarnos que el campo content
no sea descartado por los strong_param, para eso dentro del controller de posts app/controllers/posts_controller.rb
agregaremos al método .permit
dentro de post_params
el nombre de nuestro atributo :content
Debería quedar:
params.require(:post).permit(:title, :content)
Finalmente lo último que tenemos que modifcar es la vista para mostrar el contenido del post. Para lograr esto modificaremos el archivo dentro de views/posts/show
y agregaremos:
<%= @post.content %>
Nuestro último paso es probar todo, levantamos el servidor con rails s
y entramos a localhost:3000/posts
, vamos a crear un nuevo post y arrastramos algunas imágenes sobre nuestro editor y disfrutamos mientras actiontext hace el resto del trabajo.