Rails嵌套with_option:如果用于验证

Dmi*_*tri 12 ruby validation nested ruby-on-rails

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
Run Code Online (Sandbox Code Playgroud)

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

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

我做错了什么?示例显示,嵌套with_option应该可行.

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

Bri*_*ing 17

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

with_options :unless => !(outer condition) do
  with_options :if => (inner condition) do
Run Code Online (Sandbox Code Playgroud)

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