Eu tenho um modelo com suas validações e descobri que não posso atualizar um atributo sem validar o objeto antes.
Eu já tentei adicionar on => :create
sintaxe no final de cada linha de validação, mas obtive os mesmos resultados.
Meu modelo de anúncio tem as seguintes validações:
validates_presence_of :title
validates_presence_of :description
validates_presence_of :announcement_type_id
validate :validates_publication_date
validate :validates_start_date
validate :validates_start_end_dates
validate :validates_category
validate :validates_province
validates_length_of :title, :in => 6..255, :on => :save
validates_length_of :subtitle, :in => 0..255, :on => :save
validates_length_of :subtitle, :in => 0..255, :on => :save
validates_length_of :place, :in => 0..50, :on => :save
validates_numericality_of :vacants, :greater_than_or_equal_to => 0, :only_integer => true
validates_numericality_of :price, :greater_than_or_equal_to => 0, :only_integer => true
Minha tarefa de rake faz o seguinte:
task :announcements_expiration => :environment do
announcements = Announcement.expired
announcements.each do |a|
#Gets the user that owns the announcement
user = User.find(a.user_id)
puts a.title + '...'
a.state = 'deactivated'
if a.update_attributes(:state => a.state)
puts 'state changed to deactivated'
else
a.errors.each do |e|
puts e
end
end
end
Isso lança todas as exceções de validação para esse modelo, na saída.
Alguém como atualizar um atributo sem validar o modelo?
ruby-on-rails
validation
Brian Roisentul
fonte
fonte
update_attribute
foi descontinuado no Rails 4, FYI. Tente usar a.attributes ({...}). Save (false). Ou se você não se importa (ou deseja) que retornos de chamada sejam executados, faça o checkoutupdate_column
.save(false)
não funciona, você deve usarsave(validate: false)
update_attribute
não parece ser preterido em trilhos 4.2 (que é alias comoupdate_column
): api.rubyonrails.org/classes/ActiveRecord/...update_column
. Muita coisa pode mudar em dois anos! :) Obrigado por apontar isso. Leia mais sobre o assunto aqui: groups.google.com/forum/?hl=pt_BR&fromgroups#!topic/…Você pode fazer algo como:
fonte
object.attributes = hash
está um pouco mais alinhado com a pergunta. Se alguém se pergunta,update_attributes(hash)
ele próprio simplesmente fazself.attributes = hash; save
.tente usar
funciona para mim
fonte
Você pode usar:
Verifique: http://apidock.com/rails/ActiveRecord/Persistence/update_column
fonte
update_columns
se você estiver procurando atualizar vários atributos.Toda a validação do modelo é ignorada quando usamos
validate: false
fonte
Isso não deveria ser
então só funciona durante a criação?
fonte
I already tried to add on => :create syntax at the end of each validation line, but I got the same results.