2012-11-01 24 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 

Vì vậy, trước khi trình kiểm soát được thực hiện, chương trình con thể cập nhật được gọi và nó populates mảng errors[:base] với các lỗi thích hợp, có nghĩa là đối tượng không thể cập nhật. Và tôi muốn nó bỏ qua phần còn lại của các xác nhận nếu có bất kỳ lỗi nào được tìm thấy trong chương trình con này, nhưng ví dụ trên là NOT làm việc - nó thực hiện tất cả các xác nhận hợp lệ.Rails lồng with_option: nếu sử dụng trong xác nhận

Nhưng, nếu tôi thay đổi :if => "self.current_step == basic" thành :if => "self.errors.empty? && self.current_step == basic" hoạt động như một sự quyến rũ.

Tôi đang làm gì sai? Ví dụ cho thấy, lồng nhau with_option sẽ hoạt động.

Ai đó có thể giúp tôi không? Cảm ơn trước.

+0

Dường như với tôi, rằng đó là lỗi, điều kiện gây ra không được hợp nhất với nhau, vì vậy chỉ cuối cùng trong số họ thực sự có liên quan. Hy vọng rằng ai đó sẽ chú ý đến điều này và nó sẽ được sửa chữa trong các phiên bản sau. – Dmitri

Trả lời

12

Bạn nói đúng khi lồng hai: nếu điều kiện, phần bên trong sẽ thay thế phần bên ngoài và luôn được kiểm tra. Cách giải quyết để xử lý hai cấp độ lồng nhau là:

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

Điều kiện nếu và trừ khi không ghi đè lên nhau. Tôi không chắc chắn tôi sẽ gọi đây là một lỗi, nhưng nó sẽ là tốt đẹp nếu bạn có thể làm tổ nhiều: nếu điều kiện.

+0

Tôi không biết điều này. Cảm ơn bạn. –

Các vấn đề liên quan