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条件不会相互覆盖.我不确定我会称这是一个错误,但如果你可以嵌套多个会很好:如果条件.