Ruby on rails 仅以特定形式验证

Ruby on rails 仅以特定形式验证,ruby-on-rails,validation,Ruby On Rails,Validation,是否有任何方法仅在特定表单(控制器的操作)中触发验证,而不是在每次保存或更新时全局触发验证? 类似于User.create(:validate=>true)标志。是的,您可以为验证提供条件,例如: validates_presence_of :something, :if => :special? private def make_sepcial @special = true end def special? @special end 现在,要启用这些验证,只需执行以下操

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

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

validates_presence_of :something, :if => :special?

private

def make_sepcial
  @special = true
end

def special?
  @special
end
现在,要启用这些验证,只需执行以下操作:

s = SomeModel.new
s.make_special

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

validates_presence_of :something, :if => :persisted?

这将仅对已保存的
用户
s进行验证,但不会对新的
用户
s进行验证。请参阅上的API文档。

这有点旧。但我发现这是处理这种行为的好方法。

你为什么要这么做?如果我们知道你问题背后的原因,也许我们可以给出一个更好的答案。我的用户模型很混乱,没有与配置文件分开,当你注册时,你只需要提供几个字段,其余的是通过编辑用户操作来填写。顺便说一句,你可以通过所有的验证:model.save(false)我只是想指出这听起来是个坏主意。验证是为了保护您的数据库不受毫无意义的数据的影响。我知道,但我不想重建应用程序的一半。。。一些基本的验证是mantadory.Nope
@special
只是一个实例变量。除非您还有更多的工作要做,否则您可以让它死掉,它不会被持久化到进一步的数据库查询中?如果您希望对新的进行反向验证,但不希望保存。