2012-11-01 20 views
9
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]陣列具有適當的錯誤,這意味着對象是不可更新的。如果在此子程序中發現任何錯誤,我希望它跳過其餘的驗證,但上述示例是NOT正在工作 - 它執行所有驗證。導軌嵌套with_option:如果在驗證中使用

但是,如果我將:if => "self.current_step == basic"更改爲:if => "self.errors.empty? && self.current_step == basic"就像一個魅力。

我在做什麼錯了?示例顯示,嵌套with_option應該工作。

有人可以幫助我嗎?提前致謝。

+0

在我看來,這是一個錯誤,導致條件沒有被合併在一起,所以只有最後一個實際上涉及到。希望有人會關注這個問題,它將在未來的版本中得到修復。 – Dmitri

回答

12

你是對的,當嵌套兩個:如果條件,內部將取代外部的一個,總是被檢查。處理兩層嵌套的解決方法是:

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

if和條件不會互相覆蓋。我不確定我會把這個錯誤稱爲錯誤,但是如果你可以嵌套多個條件,那將會很好。

+0

我不知道這一點。謝謝。 –