2015-07-28 5 views
1

У меня есть thiw код:before_create не вызывается на model.create

class Project < ActiveRecord::Base 
    acts_as_paranoid 

    belongs_to :user 
    belongs_to :organization 
    accepts_nested_attributes_for :organization 


    attr_accessible :name, :permalink, :organization_id, :user_id 

    validates_length_of :name, :minimum => 4 
    validates_presence_of :permalink 
    validates_uniqueness_of :permalink, :case_sensitive => false, :scope => :deleted_at 


    validates_presence_of :user   
    validates_presence_of :organization 

    before_create :generate_permalink 

    protected 

    def generate_permalink 
     binding.pry 
     self.permalink = "123456789" 
    end  

end 

Когда я звоню в ProjectsController # создать

p = Project.new 
p.name = "abcdef" 
p.save 

App не останавливается на binding.pry в generate_permalink, и проект недействителен и не сохраняется, поскольку permalink == nil. Почему метод generate_permalink не вызывается?

Благодаря

ответ

3

Вы должны установить premalink в before_validation обратного вызова. before_create callback вызывается после проверки. и здесь проверка не выполняется, поэтому ваш обратный вызов before_create никогда не будет звонить.

Проверить последовательность обратных вызовов http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

Смежные вопросы