2

Je suis nouveau sur les rails et j'ai du mal à déplacer un formulaire de contact de "/ contacts" à "/ contact". Simple, je sais!Ruby on Rails: Impossible de déplacer l'URL pour le formulaire de contact sans obtenir NoMethodError

J'ai suivi le guide suivant, et a obtenu tout ce travail: https://rubyonrailshelp.wordpress.com/2014/01/08/rails-4-simple-form-and-mail-form-to-make-contact-form/

Cependant, je ne peux pas sembler faire quelque chose d'aussi simple que changer l'URL sans avoir une erreur. Comme j'apprends, cela semblait être quelque chose que je devrais être en mesure de le faire ... J'ai fait les modifications suivantes:

1) routes.rb Changé:

match '/contacts', to: 'contacts#new', via: 'get' 
resources "contacts", only: [:new, :create] 

Est devenu

match '/contact', to: 'contact#new', via: 'get' 
resources "contact", only: [:new, :create] 

2) Redénommé "app/controllers/contacts_controller.rb" à "app/controllers/contact_controller.rb"

3) mis à jour et modifié la première li ne de "contact_controller.rb":

class ContactsController < ApplicationController 

devenu

class ContactController < ApplicationController 

4) déplacé le point de vue de "app/views/contacts /" à "app/views/contact /"

je reçois l'erreur suivante:

NoMethodError in Contact#new 
undefined method `contacts_path' for #<#<Class:0xa0e4500>:0xa0efb28> 
Did you mean? contact_path 

la pensée il y a un « contacts_path » quelque part, je fait une recherche dans tout le projet et aucun "contact" n'existe.

Toute aide serait grandement appréciée! Je vous remercie!

Ruby Rails 2.3.3 5.0.1

+0

Avez-vous redémarré le serveur? – radubogdan

+0

@radubogdan Oui. J'ai essayé cela plusieurs fois.La ligne surlignée est celle-ci: '<% = simple_form_for @contact,: html => {: class => 'forme-horizontale'} do | f | %> ' – S4NK

Répondre

0

Le problème est que le chemin par défaut pour un form_for @object lorsque l'objet est pas persisté (nouveau record) est toujours objects_path. Vous devrez indiquer explicitement l'URL, quelque chose comme ...

<%= simple_form_for @contact, as: :contact, url: '/contact', html: { class: "new_contact", id: "new_contact" } do |f| %> 

mais cela va gâcher le formulaire pour vos contacts existants lorsque vous essayez de les modifier. Vous devrez faire un <% if @contact.new_record? %> et <% else %> et <% end %> pour gérer les deux URL différentes requises.

Alors la meilleure recommandation est de suivre la convention! Utilisez des pluriels pour le contrôleur, réglez la route comme elle était.

À moins que vous n'ayez une raison impérieuse de violer la règle «convention sur configuration», vous ne devriez pas.

Les documents expliquent les URL par défaut utilisées. https://apidock.com/rails/ActionView/Helpers/FormHelper/form_for

+0

Cela a fait l'affaire! Et merci pour les informations sur 'form_for @ object', et" convention over configuration ". Tout cela est nouveau, alors je l'apprécie beaucoup! J'ai voté pour la réponse ... Je n'ai pas encore assez de réputation. :) – S4NK

+0

Content de pouvoir aider! Bien que vous ne puissiez pas encore "voter" la réponse, vous devriez avoir la possibilité "d'accepter" la réponse ... l'option est immédiatement à gauche de ma réponse. Ce serait génial si vous pouviez le faire. – SteveTurczyn

+0

Fait! Je vous remercie! – S4NK