2016-01-29 4 views
0

Je réaménage un .haml form_for pour une vue #edit_profile afin de prendre en charge un contrôleur où les méthodes #edit et #update ont déjà été revendiquées. J'avais la forme qui fonctionnait avant avec les méthodes standard, mais apparemment Rails faisait beaucoup de coulisses que je dois maintenant spécifier et je suis coincé.Exemple de formulaire_pour une action REST personnalisée et .haml?

Je suis du genre à apprendre par mimétisme et à casser des choses, alors j'ai besoin d'un exemple. J'ai fait un googled sans n'importe quelle chance, donc j'espère que quelqu'un ici peut me pointer à un. Plus précisément: où dois-je mettre les chemins method :: patch et update_profile?

J'ai juste besoin du haml. J'ai établi que le contrôleur fonctionne avec les nouvelles méthodes (#edit_profile et #update_profile), donc tout ce que j'ai à faire est de connecter le formulaire au contrôleur.

est ici le dépôt si quelqu'un a besoin que: https://github.com/sidhene/MetPlus_PETS/blob/Update_CompanyPerson-%23146/app/views/company_people/edit_profile.html.haml

Merci à l'avance, A

Répondre

1

L'argument url doit être à l'action update_profile au lieu de l'action update. Changer update_company_person_path(@company_person) à update_profile_company_person_path(@company_person)

Edit: Votre config/routes semble correct, mais courir rake routes juste ot être sûr. Vous devriez voir une ligne avec update_profile_company_person et PATCH dedans.

+0

Merci, je pense que nous (je fais partie d'une équipe) avons déjà confirmé avec des routes rake. J'ai utilisé les tests Rspec pour vérifier le contrôleur. En supposant que les tests sont bons, au moins l'un d'entre eux aurait-il échoué si les itinéraires étaient erronés? –

+0

Les tests d'intégration (capybara, par exemple) l'auraient attrapé. 2) même si vous appelez la méthode 'render_views', il serait passé parce que le code est syntaxiquement correct, et 3) lorsque vous testez des méthodes de contrôleur, vous ' re contournant le routeur, de sorte que le code pour tester l'action 'update_profile' nomme cette action au lieu de s'appuyer sur le code d'une vue. –

1

form_for prend une valeur et Remplit ses autres attributs HTML de celui-ci (action/method etc):

form_for génère une étiquette de forme appropriée et donne un objet générateur de formulaire qui connaît le modèle du formulaire va.

Comme vous le voyez, le HTML reflète les connaissances sur la ressource dans plusieurs endroits, comme le chemin vers lequel le formulaire doit être soumis, ou les noms des champs de saisie.

Le tout point de de form_for est que vous êtes censé passer une ressource /objet à elle.

Rempli à partir du modèle, cet objet/ressource contiendra un tableau de données, tel que le nom Class etc., que Rails utilise ensuite pour remplir le formulaire.

Selon les docs:

...pour créer une nouvelle personne que vous généralement mis en place une nouvelle instance de la personne dans l'action PeopleController#new, @person, et dans le col de modèle de vue cet objet à form_for:

<%= form_for @person do |f| %> 

Le code HTML généré pour ce serait (mise en forme de module) :

<form action="/people" class="new_person" id="new_person" method="post"> 

Ainsi, si vous vouliez en déduire une autre path/url pour votre formulaire, vous devez explicitement d éfinir il:

= form_for @profile, url: profile_update_path(@profile) do |f| 

-

Dans votre cas, vous utilisez un nested resource, ce qui signifie que vous devez passer les deux parties de la route comme un tableau :

= form_for [:company_person, @company_person] do |f| 

Cela devrait fonctionner correctement pour vous.

+0

Merci! Cela ressemble exactement à ce dont j'ai besoin. Plus tôt après que j'ai le temps de "décompresser" il ... –

+0

il ressemble au deuxième exemple que vous offrez pour la ressource imbriquée n'inclut pas l'appel personnalisé. Si oui, comment puis-je l'exprimer? –

+0

Qu'entendez-vous par appel personnalisé? –