Introducci贸n a ruby on rails - callbacks y validaciones

Sebastian Loaiza Correa

Los callbacks son metodos que son llamados en algun momento del ciclo de vida de un objeto(creado-actualizado-eliminado), en este caso vamos a utizarlos para hacer varias validaciones antes realizar algunas acciones con metodos que ya rails y devise tienen para nosotros pero tambi茅n podemos hacer callbacks con metodos creados por nosotros mismos dentro de la clase.

Asi que continuando con nuestra aplicaci贸n de notas vamos a aplicarlo.

En el controlador de notas


before_action :authenticate_user!, except: [:index, :show] #Antes de cualquier acci贸n en el controlador verificamos si el usuario esta autenticado utilizando en metodo authenticate_user! de devise exepto para index y show

Ahora en el modelo聽


validates :title, presence: true, uniqueness: true #Validamos que en los campos all谩 contenido y que el titulo sea 煤nico
validates :body, presence: true

Ahora vamos a crear nuestros metodos metodos para editar y eliminar,聽 tambi茅n modificamos el metodo create en nuestro controlador para agregar al usuario autor de la nota


#post /notes 
def create    
 @note = current_user.notes.new(title: params[:note][:title], body: params[:note][:body]) #Put current user at foreign key    
 if @note.save()      
  redirect_to @note    
 else       
  render :new #use new view with this variable class    
 end  
end
 
#delete /notes/:id  
def destroy   
 @note = Note.find(params[:id])   
 @note.destroy #delete object of db   
 redirect_to notes_path  
end

#get /notes/:id/edit  
def edit    
 @note = Note.find(title: params[:note][:title], body: params[:note][:body])  
end

#put /notes/:id/update  
def update    
 @note = Note.find(params[:id])    
 if @note.update(params[:title, :body])      
  redirect_to @note    
 else      
  render :edit     
 end
end


Vamos a index dentro de nuestras vista de las notas y agregamos las opciones para editar y eliminar mas la condici贸n que solo permite al autor de la nota poder eliminarla o editarla


<% if current_user && current_user == note.user %>          
 <span><%= link_to "Eliminar", note, method: :delete %></span>          
 <span><%= link_to "Editar", edit_note_path(note)%></span>
<% end %>

Ahora para la vista que necesitamos para editar nuestras notas vamos a reutilizar el formulario que ya tenemos para crearlas as铆 que lo primero que vamos hacer es crear un nuevo partial llamado notes_form y vamos a pegar aqu铆 el formulario que ya teniamos, y en nuestros archivos new y edit vamos a renderizarlo y le vamos a pasar el nombre de la funcion como parametro asi:

En el partials
<div class="form col-md-10">  
 <h1><%= name %> nota</h1>  
 <%= form_for(@note) do |f|%>    
  <div class="field">      
   <%=f.text_field :title, placeholder: "Titulo", class:"form-control data-title"%>    
  </div>    
  <div class="field">      
   <%=f.text_field :body %>    
  </div>     
  <div class="field">      
   <%=f.submit "guardar", class:"btn be-red white"%>    
  </div>  
 <%end%>
</div>

En new y edit
<%= render "partials/article_form", {name: "Crear"}%> #Cambia la variable segun el archivo

Ya solo nos queda probar estas nuevas funcionalidades y con esto hemos terminado nuestra aplicacion de notas en rails.... Bueno tal vez no tanto,
hay algo que todav铆a no funciona muy bien, en este momento cualquier usuario pueder ver las notas de todos los usuarios que esten dentro de nuestra app y pues no creo que queramos eso, asi que hay dos variantes para solucionar este problema que te pueden ayudar a practicar lo que has visto hoy he ir un poco mas all谩...

1. Hacer que cada usuario pueda ver solo sus propias notas.
2. Que nuestra app funcione como una herramienta colaborativa en la cual, dentro de un grupo de usuarios puedan postear notas y hacer comentarios.

Puedes hacer fork del repositorio en GitHub donde se encuentra el proyecto que hemos creado y empezar a trabajar sobre el.
repo: https://github.com/sloaizac/notes-app-rails-example
Agrege algunos estilos en app/assets/stylesheets, puedes agregar tus propios estilos o mejorarlos
#programacion #ruby #rails #web

Sebastian Loaiza Correa
sloaizac

Hi, my name is Sebastian, I'm engineering system student, I'm from Medellin-Colombia

full-stack developer
CO

Comentarios

Reg铆strate y haz el primer comentario!