验证方法调用仅适用于创建,而不适用于更新

时间:2012-09-25 01:04:43

标签: ruby-on-rails ruby jruby ruby-on-rails-2 jrubyonrails

我的模型中有验证方法

def validate
  super    
  if some condition
    errors.add('', 'some text')
  end
end

此方法调用Create和Update。我不想打电话给Update。我怎么能这样做?

我正在使用rails2.3.11和jruby。

更新: 我可以使用这个validate :custom_validation, :on => :create,但他们如何调用创建和更新?

我还检查了validate_on_create,但是当validate被调用时,我仍然不知道吗?

2 个答案:

答案 0 :(得分:7)

使用

validate :custom_validation, :on => :create

并将您的方法名称从validate更改为custom_validation,即

def custom_validation
  super    
  if some condition
    errors.add('', 'some text')
  end
end

并且上述方法仅在创建而不是在更新时调用

答案 1 :(得分:0)

使用:on => :create,对我而言,在运行Rails 4.2.5.1的较旧应用程序中,我得到了意外的结果

我不希望在调用.valid?时调用下面的验证,但是会被调用。

a) My Test Model contained `validate :exec_on_create, :on => :create`.
b) In console
001 > t = Test.new(msg: '7 ...')
002 > t.valid?
******* "exec_on_create" was called.
=> true

:on => :create更改为before_create :exec_on_create的效果超出了我的期望……不再称为仅在创建时才调用的验证。

a) My test Model contained `before_create :exec_on_create`.
b) In console
001 > t = Cals2Db::Test.new(msg: '7 ...')
002 > t.valid?
=> true