model.create 上未调用 before_create

Dav*_*vid 3 ruby-on-rails ruby-on-rails-3

我有这个代码:

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
Run Code Online (Sandbox Code Playgroud)

当我调用 ProjectsController#create 时

p = Project.new
p.name = "abcdef"
p.save
Run Code Online (Sandbox Code Playgroud)

应用程序不会停止在generate_permalink中的binding.pry上,并且该项目无效且未保存,因为permalink == nil. 为什么没有调用generate_permalink方法?

Sam*_*dhe 8

您必须premalinkbefore_validation回调中设置。 before_create验证后调用回调。此处验证失败,因此您的before_create回调永远不会调用。

在此处检查回调序列 http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html