Rails形成validation条件绕过

我有一个rails模型,可以validation2个表单值的唯一性。 如果这两个值不唯一,则显示validation错误,并将“提交”按钮更改为“重新提交”。 我想允许用户单击“重新提交”按钮并绕过模型validation。 我想从railsvalidation文档中做这样的事情:

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

但是我的模型中没有值,我可以检查…只是具有“重新提交”值的参数。

关于如何做到这一点的任何想法?

在我看来,这是最好的方法:

 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]' %> 

这样,所有逻辑都在模型中,控制器代码将保持不变。

试试这个:

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

它绕过了validation(尽管它们都是)。

对此并不积极,但你可以尝试在模型中添加一个attr_accessor来保存表单是否已经提交过一次。

只需添加

attr_accessor :submitted

到你的模型并在你的validation中检查它。

您只需查看提交按钮即可确定是否要执行validation。

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