2011-05-18 67 views
0

我有一大堆字段的模型。並非所有字段都是基於用戶選擇某種類型的表單而使用的。我有大約6種不同類型的表單,因此可以在其中的4個表單上使用一個字段。Rails 3對一組字段的驗證

有沒有一種方法來組合驗證基於一個元素ie?

case xxx 
    when "form1" 
    validates :field1, :presence => true 
    when "form2" 
    validates :field1, :presence => true 
    when "form3" 
    validates :fiel2, :presence => true 
end 

我會做客戶端驗證,但我顯然需要服務器端以確保他們已經提交了良好的數據。

任何建議如何做到這一點?

我正在使用Rails3與Mongoid 2.0

在此先感謝!

回答

1

這樣的事情?

validates :field1, :presence => true, :if => Proc.new { |foo| %w{form1 form2}.include?(foo.xxx) } 
validates :field2, :presence => true, :if => Proc.new { |foo| %w{form1 form3}.include?(foo.xxx) } 
validates :field3, :presence => true, :if => Proc.new { |foo| %w{form2 form3}.include?(foo.xxx) } 
+0

這不會工作,因爲foo是什麼被驗證。 foo不知道正在處理什麼樣的表單? – Lee 2011-05-18 12:02:03

+0

對不起,我假設xxx會是你的模型類的一個方法。由於不是,請將該位更改爲%w {form1 form2} .include?(xxx)。也許真正的問題是xxx從哪裏來?我之前使用過class_attribute來允許將模型設置爲某種模式,但不確定這適用於您的情況。 – MacksMind 2011-05-18 15:57:29

1

我看到模型類有一個問題,不得不深入瞭解所涉及的視圖。如果視圖中的表單命名不同,解決方案將無法工作。您將需要使用ASP.NET中使用的「驗證組」。你可以做一些搜索,找到一個類似Rails的解決方案或自己推出。也許這一個將幫助:https://github.com/akira/validationgroup