[Ruby on Rails] Lorsque l'acquisition de l'identifiant du paramètre ne s'est pas bien déroulée

Cible

Obtenez des informations d'identification. J'espère que cela sera utile pour la procédure de solution lorsque les problèmes liés aux paramètres ne fonctionnent pas.

Environnement de développement

ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina google chrome

supposition

Cette fois, je suis tombé sur l'obtention de l'identifiant du paramètre, Je vais l'écrire sous forme de mémorandum.

Statut

Nous allons résoudre ces problèmes.

Contrôleur de doute

app/controllers/img_searchs_controller.rb


  def destroy
    # binding.pry
    @img_searchs = current_customer.img_searchs
    @img_search = @img_searchs.find_by(id: params[:id])
    unless @img_search
      redirect_to new_img_search_path
    end
    if @img_search.destroy
      redirect_to request.referer
    else
      render :new
    end
  end

Ecrire et vérifier binding.pry, @img_search = @ img_searchs.find_by (id: params [: id]) devient nul. La description elle-même semble correcte, mais je ne peux pas passer l'identifiant. Quand je vérifie les paramètres, id = 'new'. (* Je vous expliquerai plus tard, mais si je pouvais bien le confirmer, la solution était rapide) → Il est possible que la description de la vue soit incorrecte.

Vue du doute

app/views


<% @img_searchs.each do |img_search| %>

...

<%= link_to "Effacer", new_img_search_path(img_search), method: :delete %>
<% end %>

Les variables elles-mêmes correspondent dans chaque déclaration, il ne semble donc pas y avoir d'erreur de description. Cependant, lorsque j'ai utilisé la méthode de destruction jusqu'à présent, img_search_path(img_search), method: :delete Puisqu'il n'y avait pas de nouveau comme ça, c'était un peu étrange. → Vérifiez le routage.

Routes suspectes

config/routes.rb


resources :img_searchs, only: [:create, :destroy, :new]

Correspondant à. .. .. Juste au cas où, faites également ce qui suit.

Terminal


$ rails routes
new_img_search GET     /img_searchs/new(.:format)
                public/img_searchs#new
          DELETE  /img_searchs/:id(.:format) 
                        public/img_searchs#destroy

Après tout, cela convient. .. .. Même si je vérifie à nouveau la vue, la description elle-même est toujours correcte. Mais lorsque vous déplacez le curseur d'écran sur le lien de suppression. .. .. (Dans google chrome, l'URL associée est affichée en bas à gauche)

3000/img_searchs/new.15



 Pas sous la forme / img_searchs /: id!
 À ce moment-là, je n'avais aucune idée de pourquoi le nouveau était inclus.

 Cependant, je pensais que l'inconfort que j'ai mentionné plus tôt devait être résolu,
 Bien que ce ne soit pas une description très claire, j'ai décidé de réécrire le routage.


#### **`config/routes.rb`**
```rb

resources :img_searchs, only: [:create, :new]
delete 'img_searchs/:id' => 'img_searchs#destroy'

Et quand tu le relances

Terminal


$ rails routes
new_img_search GET     /img_searchs/new(.:format)
                public/img_searchs#new
          DELETE  /img_searchs/:id(.:format) 
                        public/img_searchs#destroy

Le résultat était exactement le même. J'ai donc décidé de spécifier le chemin avec as.

config/routes.rb


resources :img_searchs, only: [:create, :new]
delete 'img_searchs/:id' => 'img_searchs#destroy', as: 'img_search'

Et lorsque je l'exécute à nouveau, une erreur se produit comme indiqué ci-dessous. Le nom du chemin a déjà été utilisé comme contenu. Et cela.

Terminal


$ rails routes
rails aborted!
ArgumentError: Invalid route name, already in use: 'img_search' 
You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here:
...

C'est stupide! Quand j'y pense, J'utilisais comme: 'img_search' dans l'URL d'une autre page. C'est la cause de ce temps. Par conséquent, modifiez le nom du chemin comme indiqué ci-dessous.

config/routes.rb


resources :img_searchs, only: [:create, :new]
delete 'img_searchs/:id' => 'img_searchs#destroy', as: 'img_search_destroy'

Modifiez ensuite le chemin de la vue.

app/views


<% @img_searchs.each do |img_search| %>

...

<%= link_to "Effacer", img_search_destroy_path(img_search), method: :delete %>
<% end %>

Cela a bien fonctionné.

Résumé

Cette fois, j'avais besoin de le réparer rapidement, alors Au lieu de changer l'existant en tant que: 'img_search' Changé le nouvellement ajouté comme: «img_search» en: «img_search_destroy».

Un autre facteur qui s'est produit cette fois est C'est arrivé parce que j'avais moi-même oublié la priorité de routes.rb, alors J'espère que cela aide à résoudre la personne qui a la même erreur.

À propos, l'ordre de priorité de routes.rb est celui décrit ci-dessus.

Il existe de nombreuses façons de résoudre les erreurs, il semble donc nécessaire de les accumuler étape par étape.

Recommended Posts

[Ruby on Rails] Lorsque l'acquisition de l'identifiant du paramètre ne s'est pas bien déroulée
Un mémo lors de l'obtention du numéro entrant à l'aide de Broadcast Receiver sur Android 9/10 ne fonctionne pas
[Ruby on Rails] Fonction de recherche (non sélectionnée)
Quand le terminal Ruby on Rails revient en arrière
Lorsque @Transactional of Spring Boot ne fonctionne pas
Confirmation finale lorsque la version ruby ne change pas
Ruby on Rails élémentaire
Principes de base de Ruby on Rails
Association Ruby On Rails
Remarque: l'analyseur de mémoire ne fonctionne pas sous Mac OS
[Ruby on Rails] Remplacez l'ID d'URL par le nom de la colonne
Tutoriel Ruby on Rails Remarques gênantes lors de l'exécution sous Windows
[Railways] Railways ne fonctionne pas lorsque la racine du projet RubyMine est différente du répertoire racine Rails.
[Ruby on Rails] S'il y a des enregistrements en double lors de l'enregistrement des données, ne vous enregistrez pas
[Ruby on rails] Lors de l'exécution de la commande heroku, bash: heroku: command not found s'affiche. [Tutoriel Rails]
Création de portfolio Ruby on Rails
Record d'apprentissage Ruby on rails -2020.10.04
[Ruby on Rails] Debuck (binding.pry)
Record d'apprentissage de Ruby on rails -2020.10.05
Record d'apprentissage de Ruby on rails -2020.10.09
[Rails] Impossible de trouver avec'id '=: id et l'action de mise à jour n'est pas exécutée
Que vérifier lorsque rails db: la migration ne réussit pas
(Ruby on Rails6) Affichage de la base de données qui a obtenu l'identifiant de la base de données
Record d'apprentissage Ruby on rails-2020.10.07 ②
Recherche d'enregistrements Ruby on Rails, création sinon méthode find_or_create_by
[Rails] Résolution du problème selon lequel le délai d'expiration de la session ne fonctionne pas
Record d'apprentissage Ruby on rails-2020.10.07 ①
Annuler la migration de Ruby on Rails
[Ruby on Rails] Restrictions de colonne lors de l'enregistrement dans DB (4 représentants)
Record d'apprentissage de Ruby on rails -2020.10.06
Résumé de la validation Ruby on Rails
Correspondance lorsque l'application Java transformée en exe avec launch4j ne fonctionne pas sur les fenêtres où openJDK est installé
Mémorandum de base Ruby on Rails
[Rails 5] [Turbolinks] Que faire lorsque JS ne fonctionne pas en raison d'une transition de page ou d'un retour du navigateur
Le ressort doit être suspecté lorsque les commandes Rails ne fonctionnent pas correctement
Créez un environnement de développement où les points d'arrêt de Ruby on Rails fonctionnent sous Windows
Le point d'arrêt ne fonctionne pas lors de l'exécution de Rails Minitest dans Ruby Test Explorer
[Rails] Que faire lorsque les rails ne répondent pas ou ne s'arrêtent pas
[Débutant] Lorsque les rails ne fonctionnent pas
[Ruby on Rails] Read try (: [] ,: key)
Installation de Ruby + Rails sur Ubuntu 18.04 (rbenv)
[Ruby on Rails] Introduction de la fonction de pagination
Connaissance de base de Ruby on Rails
Progatez Ruby on Rails
Comment utiliser Ruby on Rails
Ruby on Rails compatible japonais-anglais i18n
(Ruby on Rails6) "Effacer" le contenu publié
[Ruby on Rails] Fonction de sortie CSV