2012-06-17 18 views
8

que tengo este modelo de proyecto:no before_save trabajar con Rails 3

class Project < ActiveRecord::Base 
    validates :status, :inclusion => { :in => ['active', 'closed'] } 
    validates :title, 
      :presence => true, 
      :length => { :in => 4..30 } 

    before_save :set_default_status_if_not_specified 

    private 

    def set_default_status_if_not_specified 
    self.status = 'active' if self.status.blank? 
    end 
end 

Si se crea un nuevo objeto de la siguiente manera:

Project.create!(:title => 'Test 2', :pm_id => 1) 

me sale estos errores: Error de validación: El estado no es incluido en la lista Pero el campo de estado debe llenarse antes de guardar.

Respuesta

19

Eso es porque valida antes debefore_save.

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

(-) save 

(-) valid 

(1) before_validation 

(-) validate 

(2) after_validation 

(3) before_save 

(4) before_create 

(-) create 

(5) after_create 

(6) after_save 

(7) after_commit 

Usted podría intentar before_validation?

+0

Tienes razón. ¡before_validation ahora funciona bien! Esta orden se ha mantenido igual desde Rails2? ¡Lo he usado tantas veces sin problemas! –

2

It looks like la validación ocurre antes de before_save devoluciones de llamada. ¿Quizás quieras probar before_validation en su lugar?