2009-01-08 93 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