【发布时间】:2011-02-20 05:43:29
【问题描述】:
我的一个控制器中有一个“validate_on_create”语句,我希望跳过所有种子数据。有哪些解决方案可以使我的种子文件中的 create 语句跳过此验证。我当前的解决方案是在每次运行 rake db:seed 时注释掉验证。还有什么更聪明的吗?
【问题讨论】:
标签: ruby-on-rails
我的一个控制器中有一个“validate_on_create”语句,我希望跳过所有种子数据。有哪些解决方案可以使我的种子文件中的 create 语句跳过此验证。我当前的解决方案是在每次运行 rake db:seed 时注释掉验证。还有什么更聪明的吗?
【问题讨论】:
标签: ruby-on-rails
您是否考虑在模型中添加一个在 validate_on_create 方法中检查的属性?
例子:
class MyModel < ActiveRecord::Base
attr_accessor :skip_on_create_validation
def validate_on_create
unless skip_on_create_validation
# do validation
end
end
end
# In db/seeds.rb
MyModel.create(:skip_on_create_validation => true, ......)
【讨论】:
validate_on_create 已被弃用,对吧?
您可以在保存对象时通过调用object.save(false) 显式跳过所有验证。
例如:
# In your model
def validate_on_create
# An example validation - replace with whatever you like
return true unless name.blank?
end
# In db/seeds.rb
# Create a new person
p = Person.new(:name => 'Bob')
# Save the record to the database, and *skip validation*
p.save(false)
【讨论】:
Model.create 而不是 Model.save(false)
object.create 时无法跳过验证。为什么不直接打电话给object.save(false)?
models = Model.create([{ :name => "First name" }, { :name => "Second name" }])
假设您没有通过固定装置加载它们,您可以通过调用 model.save(false) 来跳过验证。
【讨论】: