仅以特定形式进行验证

时间:2011-09-25 13:40:20

标签: ruby-on-rails validation

是否有任何方法仅在特定表单(控制器的操作)中触发验证,而不是在每次保存或更新时全局触发? 类似User.create(:validate=>true)标志的东西。

3 个答案:

答案 0 :(得分:8)

是的,您可以为验证提供条件,例如:

validates_presence_of :something, :if => :special?

private

def make_sepcial
  @special = true
end

def special?
  @special
end

现在,要启用这些验证,您需要做的就是:

s = SomeModel.new
s.make_special

答案 1 :(得分:4)

正如您在评论中所解释的那样,您希望跳过新记录的验证。在这种情况下,您可以使用thomasfedb的答案,但不要使用@special变量,但是:

validates_presence_of :something, :if => :persisted?

这将仅验证已保存的User,但不会验证新的User。请参阅persisted?上的API文档。

答案 2 :(得分:1)

这有点旧。但我发现http://apidock.com/rails/Object/with_options是处理这种行为的好方法。