before_create 未在 model.create 上调用

before_create is not called on 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#create

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

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

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

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