Ho un modello con le sue validazioni e ho scoperto che non posso aggiornare un attributo senza prima convalidare l'oggetto.Come aggiornare gli attributi senza convalida
Ho già provato ad aggiungere la sintassi on => :create
alla fine di ogni riga di convalida, ma ho ottenuto gli stessi risultati.
Il mio modello di annuncio hanno le seguenti convalide:
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
Il mio compito rastrello esegue le seguenti operazioni:
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
Questo getta tutte le eccezioni di convalida per quel modello, in uscita.
Qualcuno come aggiornare un attributo senza convalidare il modello?
Questo ha funzionato! Grazie. Segnalo come risposta non appena sarò in grado di farlo. –
È possibile utilizzare save (false) senza convalida – Dzmitry
Hmm, ma esiste un modo che analizza ancora i parametri [: instance] come fa update_attributes? – Dogweather