[RUBY] Comment désactiver le regroupement d'erreurs

【Aperçu】

1. Conclusion </ b>

2. Comment désactiver le regroupement des erreurs </ b>

3. Où il se coince </ b>

  1. Conclusion

Utilisez valide </ b>, .errors.any </ b> et .errors.full_messages.each </ b>!

  1. Comment désactiver le regroupement des erreurs

Tout d'abord, définissez la validation sur le modèle!

app/models/buy_item


  with_options presence: true do
    validates :name
    validates :date
 end

With_options vous permet de définir la présence: true (les espaces ne sont pas autorisés) de faire à la fin d'un côté. Dans ce cas, les espaces dans la colonne de nom et la colonne de date sont définis comme inutiles!

Et dans le contrôleur, c'est comme suit.

controllers/buy_items_controller.rb


 def create
    @buy_item = BuyItem.new(buy_item_params)
    if @buy_item.save
      redirect_to root_path
    else
      render :new
    end
  end

S'il est enregistré, il passera à la première page. Si quelque chose ne va pas et qu'il n'est pas enregistré, le rendu passera à la nouvelle vue. Parce que je veux faire ce qui suit.

views/buy_items/new.html.erb


 <%= render 'public/error_messages', model: f.object %>

En faisant cela, lorsque vous passez à la nouvelle vue de buy_items (render: new), vous serez redirigé vers le programme pour lequel l'affichage d'erreur est défini. f.object est | f | de @buy_item défini dans form_wtih, et le contenu de @buy_item est retiré!

Le contenu (phrases d'erreur) de "messages_public / d'erreur" est le suivant.

view/public/_error_messages


<% if model.errors.any? %>
 <div class="error">
  <ul>
     <% model.errors.full_messages.each do |message| %>
      <li class='error-message'><%= message %></li>
    <% end %>
  </ul>
</div>
<% end %>

J'utilise model car j'utilise user en plus du modèle buy_item. Vous pouvez appliquer le contenu d'erreur de validation à tous les modèles. De plus, chaque contenu d'erreur est extrait par chaque méthode et affiché par <% = message%>!

L'URL ci-dessous m'a beaucoup aidé!

URL de référence: Comment émettre le message d'erreur Rails Erreur de validation

  1. Ce que j'ai appris d'ici (utilisé en cas d'erreur)

J'ai changé le modèle en @user ou @buy_item, et j'ai eu un problème parce que l'erreur @user ne s'est pas produite ou que la méthode NameErrormethod s'est produite. De plus, f.object a également été transformé en variable d'instance sans autorisation, provoquant une erreur supplémentaire. De plus, si vous avez deux contrôleurs et que vous souhaitez les afficher avec l'index du contrôleur spécifié, vous pouvez utiliser le rendu "nom du contrôleur / nom de l'action". Cependant, comme il n'est affiché que, c'était un point aveugle que je devais décrire les données à l'intérieur.

Recommended Posts