Archivo

Posts Tagged ‘ruby’

Concerns en Ruby on Rails

septiembre 4, 2014 Deja un comentario

Una buena manera de mantener bien organizados los modelos en RoR 4 es usar Concerns, permite simplificar los modelos cuando estos crecen demasiado y reutilizar código (DRY), aunque hoy en día recomiendo utilizar Services Objects.

Un ejemplo dice más que mil palabras:

#app/models/concerns/authentication.rb
module Authentication
  extend ActiveSupport::Concern

  	included do
  			has_secure_password
  			attr_accessor :password_confirmation
  	end

module ClassMethods

  	def authenticate(username,password)
			user = find_by_username(username)
			if user && user.authenticate(password)
				user.last_login
				user
			end
	end

end

	def email_downcase
		self.email = self.email.downcase
	end

	def last_login
			update_column(:last_login, Time.now)
	end

end
end
#app/models/concerns/validation.rb
module Validation
	extend ActiveSupport::Concern

	included do
		validates :username,:password_digest,:nombre, presence: true
		validates :apellido,:fecha_nacimiento,:email, presence: true
	    validates :email, uniqueness: true
		before_validation :email_downcase
	end

end
# app/models/user.rb
class User < ActiveRecord::Base
	    include Authentication
	    include Validation
end

Como podemos ver se definieron 2 Concerns , los cuales se encargaran de la Autenticación y Validación respectivamente, lo único a tener en cuenta es “module ClassMethods”, en donde debemos poner nuestros metodos de clase y así poderlo llamarlos desde el controlador de la siguiente manera: User.authenticate, espero sirva de base.

Anuncios
Categorías:Uncategorized Etiquetas: ,