为什么update_attribute触发验证?

时间:2011-03-17 12:40:35

标签: ruby-on-rails validation

我有两个禁用的文本框。它的价值是零。

仍然update_attribute正在为这些文本框启动验证。

据我所知,update_attribute不应更新传递了nil值的spefic列。

validates_inclusion_of :text_response_time, :in => 0..60, :message => " should be between 0 to 60 minutes."

(rdb:589) params[:test][:text_response_time]
nil
(rdb:589) @test.update_attributes!(params[:test])
ActiveRecord::RecordInvalid Exception: Validation failed: Text response time  should be between 0 to 60 minutes.

任何想法!

2 个答案:

答案 0 :(得分:1)

更新属性始终验证整个对象,因此您不断获得验证失败的原因。您的选择将是简单地使用update_attribute(忽略验证)或使用条件验证,如railscast

中所述

答案 1 :(得分:0)

进一步说明:

@test.update_attribute(:test, params[:test][:text_response_time])

将保存而无需验证。

在您的情况下可能有效的另一种策略是仅对创建(而非更新)进行验证:

validates_inclusion_of :text_response_time, :in => 0..60,
  :message => "should be between 0 to 60 minutes.", :on => :create