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方法?
您必须premalink在before_validation回调中设置。
before_create验证后调用回调。此处验证失败,因此您的before_create回调永远不会调用。
在此处检查回调序列 http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html