Rails validation context
Preciso de ajuda com o meu modelo ActiveRecord. Tenho validações baseadas em contexto (mis) usando as opções de contexto internas para validações:
validates :foo, :on => :bar, :presence => true
model = Model.new
model.foo = nil
model.valid? # => true
model.save # works as expected
model.valid?(:bar) # => false
model.save(:context => :bar) # fails and returns false
Mas usando meu modelo em umaccepts_nested_attributes_for :model
e chamandoparent.save
falha (a validação é chamada e retorna false), alguma sugestão ou soluçã
Ainda sem resposta? Para explicar mais sobre o meu problema: tenho um modelo chamadoForm
que tem muitosField
s. Os usuários devem ver erros de validação ao enviar, mas o formulário deve ser salvo de qualquer maneira (com e sem erros). Existem diferentes tipos deField
s, cada um com validações globais (para garantir a consistência do banco de dados) e suas próprias validações específicas definidas pelo usuário (para validar dados inseridos pelo usuário). Então meuField
parece algo assim:
# Global validations, to ensure database consistency
# If this validations fail, the record should not be saved!
validates_associated :form, :on => :global
...
# Specific user-defined validations
# If this validations fail, the record should be saved but marked as invalid. (Which is done by a before_save filter btw.)
def validate
validations.each do |validation| # Array of `ActiveModel::Validations`, defined by the user and stored in a hash in the database
validation.new(:on => :specific).validate(self)
end
end
No meu controlador:
# def create
# ...
form.attributes = params[:form]
form.save!(:global)
form.save(:specific)
É possível algo semelhante no Rails usando a funcionalidade incorporada? Btw este não é o meu código real, o que é bastante complicado. Mas espero que vocês tenham a ideia.