Rails - Active Model
O Active Model é uma biblioteca que possui recursos que podem ser usados em objetos Ruby simples que requerem recursos semelhantes aos de um modelo (model), mas não estão vinculados a nenhuma tabela em um banco de dados.
Resumindo, o ActiveRecord deve ser usado quando o modelo representa uma tabela no banco de dados; enquanto o ActiveModel nos da acesso a muitos recursos do ActiveRecord, sem a necessidade de ter um vínculo com o banco de dados.
Recursos disponíveis
ActiveModel::API
Esse pra mim, é um dos recursos mais sensacionais do rails! Ao utilizar o ActiveModel::API, a gente na verdade está adicionando alguns recursos, onde irei comentar os 3 mais interessantes na minha opinião:
- Translation
Integra o seu objeto e a estrutura de internacionalização do Rails (i18n).
# config/locales/app.pt-BR.yml
pt-BR:
activemodel:
attributes:
order:
price: "Preço"
# model/order.rb
class Order
extend ActiveModel::Translation
end
# irb
Order.human_attribute_name("price") # Price
I18n.locale = :"pt-BR"
Order.human_attribute_name("price") # Preço
- Validations
Pra mim, um dos recursos mais sensacionais!
Permite validar objetos e garantir a integridade e a consistência dos dados dentro do seu aplicativo.
class Order
include ActiveModel::Validations
attr_accessor :price, :email
validates :price, presence: true
validates :email, format: { with: URI::MailTo::EMAIL_REGEXP }
end
# irb
order = Order.new
order.price = 200
order.valid? # false (falta o email!)
order.errors # <ActiveModel::Errors [#<ActiveModel::Error attribute=email, type=invalid, options={:value=>nil}>]>
order.email = "renan.porto"
order.valid? # false (email inválido)
order.errors # <ActiveModel::Errors [#<ActiveModel::Error attribute=email, type=invalid, options={:value=>"renan.porto"}>]>
order.email = "renan.porto1099@gmail.com"
order.valid? # true
- SecurePassword
Prove uma forma de persistir senhas de forma segura com criptografia. Esse recurso depende da gem bcrypt
para funcionar.
class Person
include ActiveModel::SecurePassword
has_secure_password
has_secure_password :recovery_password, validations: false
attr_accessor :password_digest, :recovery_password_digest
end
person = Person.new
person.valid? # false
person.password = "example"
person.password_confirmation = "otherpass"
person.valid? # false
person.password = "example"
person.valid? # true
Conclusão
O ActiveModel é uma ferramenta poderosa que muita gente conhece devido a estar incluido no ActiveRecord, porém poucas pessoas sabem que podem utilizar seus recursos separados, independente do banco de dados.
Se eu fosse sugerir um recurso que é obrigatório conhecermos, é o Validations. Esse recurso é muito útil para validar contratos e regras de negócio.
Referências
Subscribe to my newsletter
Read articles from Renan Porto directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by