Rails嵌套with_option:如果用于validation

validate :updatable? # First validation there is with_options :if => Proc.new { |object| object.errors.empty? } do |updatable| updatable.with_options :if => "self.current_step == basic" do |step| validates .... bla-bla bla 

因此,在进行任何validation之前,将调用可更新子例程,并使用适当的错误填充errors[:base]数组,这意味着该对象不可更新。 如果在此子例程中发现任何错误,我希望它跳过其余的validation,但上述示例不起作用 – 它执行所有validation。

但是,如果我改变:if => "self.current_step == basic" to :if => "self.errors.empty? && self.current_step == basic"就像魅力一样。

我做错了什么? 示例显示,嵌套with_option应该有效。

有人能帮我吗 ? 提前致谢。

你是正确的,当嵌套两个:如果条件,内部将替换外部的,并始终检查。 处理两个嵌套级别的解决方法是:

 with_options :unless => !(outer condition) do with_options :if => (inner condition) do 

if和unless条件不会相互覆盖。 我不确定我会称这是一个错误,但如果你可以嵌套多个会很好:如果条件。