Question

J'ai un modèle de rails qui valide l'unicité de 2 valeurs de formulaire. Si ces 2 valeurs ne sont pas uniques, les erreurs de validation sont affichées et le & Quot; submit & Quot; le bouton est remplacé par " resoumettre " ;. Je souhaite autoriser un utilisateur à cliquer sur la & Quot; nouvelle soumission & Quot; bouton et ignorer la validation du modèle. Je veux faire quelque chose comme ça depuis la documentation de validation de rails:

  

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

mais je n'ai pas de valeur dans mon modèle que je puisse vérifier ... uniquement pour les paramètres qui ont le & "Soumettre à nouveau &"; valeur.

Avez-vous des idées sur la façon de procéder?

Était-ce utile?

La solution

À mon avis, c’est la meilleure façon de le faire:

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

puis dans votre vue, assurez-vous de nommer la balise submit comme

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

Ainsi, toute la logique est dans le modèle, le code du contrôleur restera le même.

Autres conseils

Essayez ceci:

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

Il contourne les validations (toutes cependant).

Cela n’est pas positif, mais vous pouvez essayer d’ajouter un attr_accessor à votre modèle pour que le formulaire ait été soumis ou non une fois auparavant.

ajoutez simplement

attr_accessor :submitted

sur votre modèle et vérifiez-le dans vos validations.

Vous pouvez simplement regarder le bouton d'envoi pour déterminer si vous souhaitez effectuer les validations.

def form_method
  case params[:submit]
    when "Submit" 
      'Do your validation here'
    when "Resubmit" 
      'Do not call validation routine'
  end
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top