Pergunta

Dado um modelo que tem validações no arquivo model_name.rb, como posso aceder a essas validações manualmente? Eu gostaria de cozinhar o meu próprio sistema de validação de formulário que iria trabalhar juntamente com o built-in Rails truques e quero manter tudo o mais seco possível. Meu principal problema é que eu preciso para fazer validações do lado do servidor antes de qualquer um dos valores de forma bater o banco de dados (estou usando um formulário de várias etapas).

Basicamente, eu estou querendo saber se existe um método como

User.validations.each do |v|
    puts v.constraint.to_s + " " + v.message
end

Existe algo semelhante a isto?

Agradecemos antecipadamente.

Foi útil?

Solução

O meu principal problema é que eu preciso fazer validações do lado do servidor antes de qualquer os valores do formulário bater o banco de dados (eu sou através de um formulário de várias etapas).

Se o seu modelo não é válido de acordo com as validações em seu arquivo de classe, em seguida, seus dados não são salvas no banco de dados (a menos que você passar false ao método save para validações suprimir).

  • Você pode perguntar a um modelo que seja válida em qualquer ponto, invocando seus métodos valid? / invalid?.

Outras dicas

O ActiveRecord objeto expõe o método de erros após válida? é chamado, o que lhe dá mensagens sobre quais validações são violados. Você pode verificar válido? e, em seguida, verificar para ver se qualquer um dos campos na parte do formulário que estão em são inválidos. você poderia fazer algo assim por um formulário com campos campo1 e campo2.

unless x.valid?
  [:field1,:field2].each do |field|
    yes_there_was_an_error if x.errors[field]
  end
end

Sua melhor aposta é usar uma máquina de estado e armazenar os dados no banco de dados entre as várias etapas do formulário.

Você pode fazer por exemplo validates_presence_of :username, :if => proc {|u| u.signup_step >= 2 }, onde signup_step é uma coluna de número inteiro na base de dados.

Assim, mesmo que você diz que não quer armazená-lo no banco de dados entre as formas, eu acho que você deveria. Se você fizer isso, você pode usar validações e modelos regulares, sem hacks desagradáveis. E honestamente, eu duvido que fazê-lo desta maneira é um problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top