2009-01-08 90 views
16

我有一個驗證2個表單值唯一性的rails模型。如果這兩個值不唯一,驗證錯誤將顯示,「提交」按鈕將更改爲「重新提交」。我想讓用戶點擊「重新提交」按鈕並繞過模型驗證。我想這樣做從軌驗證文件是這樣的:Rails表單驗證條件旁路

validates_uniqueness_of :value, :unless => Proc.new { |user| user.signup_step <= 2 }

,但我沒有在我的模型AA價值,我可以檢查......只是有PARAMS 「重新提交」值。

有關如何做到這一點的任何想法?

回答

39

在我看來,這是做到這一點的最好辦法:

class FooBar < ActiveRecord::Base 
    validates_uniqueness_of :foo, :bar, :unless => :force_submit 
    attr_accessor :force_submit 
end 

那麼在您看來,要確保你的名字就像

<%= submit_tag 'Resubmit', :name => 'foo_bar[force_submit]' %> 

提交標籤這種方式,所有邏輯在模型中,控制器代碼將保持不變。

9

試試這個:

梁2:Model.save(false)
的Rails 3:Model.save(:validate => false)

它繞過驗證(所有這些雖然)。

+1

我的稱號是一種誤導......我不想完全繞過所有我的驗證的,只是2 validates_uniqeness_of – hacintosh 2009-01-08 12:12:20

+1

在此只是偶然。你應該在使用Rails 3時使用`object.save(:validate => false)`。 – 2011-10-08 15:45:15

2

不看好這個,但你可以嘗試到attr_accessor添加到模型持有與否的形式已經過一次submited。

只需添加

attr_accessor :submitted

到模型中,並在您的驗證檢查它。

1

你可以只看提交按鈕,以確定是否要進行驗證。

def form_method 
    case params[:submit] 
    when "Submit" 
     'Do your validation here' 
    when "Resubmit" 
     'Do not call validation routine' 
    end 
end