2012-10-05 41 views
0

我想知道爲特定字段顯示警告的最佳實施是發送到數據庫。Rails 3驗證只觸發一次以模擬新記錄中的警告

舉個例子,有人提供的數據被認爲是有效的,但有問題。所以我們想要把它看作是一次驗證錯誤,並確認它是用戶真正想要輸入的內容。此時他們可以選擇繼續或更改輸入的數據。如果他們選擇繼續,他們會得到批准,我們將在下一個運行中跳過驗證。

但是(並且這是我不確定的部分),如果他們將該字段更改爲另一個值得懷疑的值,我們想讓他們通過相同的過程。請記住這些是新記錄,而不是已經保存到數據庫的記錄。

基本的條件驗證可以實現這樣的壯舉嗎?會有更好的選擇嗎?

只是爲了澄清我的應用程序確切知道如何處理這些有問題的數據,但它的處理方式與正常數據不同,我們只是想提前通知用戶警告。

目前,驗證是您典型的自定義驗證方法,它指示對象的有效性。

validate :some_field_some_rules 


def some_field_some_rules 
    if some_conditions_must_be_true 
     errors.add(:some_field, "warning message") 
    end 
end 

回答

2

編輯,讓我們嘗試一個自定義驗證,只有在需要時纔會觸發。

class MyModel < ActiveRecord::Base 

    attr_accessor :check_questionable 
    validate :questionable_values_validation, on: :create, if: Proc.new { |m| m.check_questionable } 

    def initialize 
    check_questionable = true 
    end 


    private 
    def questionable_values_validation 
    if attribute1 == "Questionable value" 
     self.errors[:base] << "Attribute1 is questionable" 
     check_questionable = false 
    end 
    end 

end 

然後,當渲染創建形式,一定要加一個hidden_​​field爲check_questionable:

f.hidden_field :check_questionable 

所以第一次調用創建操作時,它會與check_questionable = true保存。如果存在可疑值,我們會向ActiveRecord標準錯誤添加一個錯誤,並將check_questionable設置爲false。然後,您將重新呈現new操作,但這次將hidden_​​field設置爲false。

這樣一來,當表單重新提交,也不會觸發questionable_values_validation ...

我沒有測試它,可能需要一定的調整,但它是一個良好的開端,我相信!

+0

不完全,我不想保存記錄,直到用戶看到警告。我還希望將觸發警告的業務邏輯定義爲自定義的活動記錄驗證,這樣它就可以像一個典型的錯誤消息一樣被處理,而我的代碼的其餘部分可以保持不可知,而無需處理任何其他實例變量。爲了清晰起見,我會更新我的問題。 – Noz

+0

編輯答案! –

+0

太好了,這正是我一直在尋找的。 – Noz