16
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

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

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

我做错了什么?示例表明,嵌套with_option应该可以工作。

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

4

1 回答 1

24

你是对的,当嵌套两个 :if 条件时,内部的将替换外部的并且总是被检查。处理两级嵌套的解决方法是:

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

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

于 2013-03-13T14:28:52.547 回答