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.
ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina google chrome
Cette fois, je suis tombé sur l'obtention de l'identifiant du paramètre, Je vais l'écrire sous forme de mémorandum.
Nous allons résoudre ces problèmes.
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.
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.
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é.
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