ActiveModel: validações
O curso trata de duas partes do ActiveModel. A primeira são os nomes: model_name devolve um objeto ActiveModel::Name com nove valores de nome mais human, usados na busca de partials, nos nomes de campo, nos helpers de rota e no I18n. Um namespace muda element, param_key, route_key e i18n_key de jeitos diferentes. Sobrescrever self.model_name faz um form object pegar emprestada a identidade de outro model. A segunda parte é a validação: classes EachValidator para checagens reutilizáveis por atributo e ActiveModel::Validator com validates_with para checagens do registro inteiro.
O que você vai aprender
- ✓O que cada campo de ActiveModel::Name guarda e onde o Rails o lê
- ✓Como um namespace muda element, param_key, route_key e i18n_key
- ✓Sobrescrever self.model_name para usar os nomes de outro model, e a confusão que isso pode causar
- ✓Como human busca uma tradução e recorre a um nome legível quando ela falta
- ✓Escrever uma classe EachValidator reutilizável que respeita allow_nil e allow_blank
- ✓Checagens do registro inteiro com ActiveModel::Validator e validates_with
ActiveModel::Naming: o que model_name devolve
"Form objects: lógica complexa" tratou de ActiveModel::Model, de ActiveModel::Attributes e de como form_with chama model_name, persisted? e to_key num objeto Ruby simples para montar um formulário que funciona. Aquele curso tratou model_name como um método que devolve uma coisa de que o Rails…
Ler a aula completa grátis →Currículo
7 aulasActiveModel::Naming: o que model_name devolve
model_name devolve um objeto ActiveModel::Name com nove valores de nome mais human, usados em partials, formulários e rotas.
route_key, param_key e i18n_key: o namespace muda cada um de um jeito
Numa classe com namespace, element descarta o módulo, param_key e route_key o achatam com sublinhados, e i18n_key usa barra.
Sobrescrevendo self.model_name: emprestando a identidade de outro model
Sobrescrever self.model_name com outro nome faz o form object usar params, rotas e chaves de I18n de outro model.
ActiveModel::Translation e .human: busca no I18n com reserva
human faz uma busca no I18n no escopo models e recorre ao element legível quando não há tradução.
ActiveModel::EachValidator: uma classe de validador reutilizável
Uma subclasse de EachValidator define validate_each uma vez e é reusada em qualquer validates por convenção de nomes.
ActiveModel::Validator e validates_with: validadores do registro inteiro
ActiveModel::Validator recebe o registro inteiro, põe erros em :base e é ligado com validates_with, e não com validates.
Juntando tudo: nomes e validação, os dois reutilizáveis
Um formulário de filtro junta model_name sobrescrito e o EmailValidator reutilizável, os dois apoiados em contratos compartilhados do Rails.