16

2 つのフォーム値の一意性を検証する Rails モデルがあります。これら 2 つの値が一意でない場合、検証エラーが表示され、[送信] ボタンが [再送信] に変更されます。ユーザーが「再送信」ボタンをクリックして、モデルの検証をバイパスできるようにしたいと考えています。Railsの検証ドキュメントから次のようなことをしたい:

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

しかし、チェックできるモデルに値がありません...「再送信」値を持つパラメータだけです。

これを行う方法についてのアイデアはありますか?

4

4 に答える 4

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

このように、すべてのロジックがモデル内にあり、コントローラー コードは同じままです。

于 2009-01-08T07:54:49.047 に答える
10

これを試して:

レール 2:Model.save(false)
レール 3:Model.save(:validate => false)

検証をバイパスします(ただし、すべて)。

于 2009-01-08T03:37:18.067 に答える
2

これについては肯定的ではありませんが、モデルに attr_accessor を追加して、フォームが以前に一度送信されたかどうかを保持することを試みることができます。

追加するだけ

attr_accessor :submitted

モデルに追加し、検証で確認してください。

于 2009-01-08T03:52:52.730 に答える
1

送信ボタンを見るだけで、検証を実行するかどうかを判断できます。

def form_method
  case params[:submit]
    when "Submit" 
      'Do your validation here'
    when "Resubmit" 
      'Do not call validation routine'
  end
end
于 2009-01-08T07:31:56.033 に答える