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
回调中设置 premalink
。
before_create
验证后调用回调。此处验证失败,因此您的 before_create
回调将永远不会调用。
在此处检查回调序列
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
我有这个代码:
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
回调中设置 premalink
。
before_create
验证后调用回调。此处验证失败,因此您的 before_create
回调将永远不会调用。
在此处检查回调序列 http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html