Ruby on rails: unique ressource et form_for
Je veux utilisateur de travailler avec une seule commande connecté à la session de l'utilisateur. J'ai donc mis unique ressource pour l'ordre
routes.rb:
resource :order
vues/commandes/nouveau.html.erb:
<%= form_for @order do |f| %>
...
<% end %>
Mais quand j'ai ouvert la nouvelle page de commande, j'obtiens une erreur:
undefined method `orders_path`
Je sais, que je peux :url => order_path
dans form_for
, mais quel est le vrai moyen de résoudre cette collision?
- Je ne suis pas sûr si je comprends pourquoi vous n'utilisez pas de singulier pour votre ressource
- Parce que les rails de guide de conseils pour utiliser le pluriel du contrôleur. Mais dans la forme singulière de contrôleur existe même bug...
- Si vous avez juste un singulier imbriquée des ressources qui vous donne des problèmes, vous pouvez utiliser
form_for [@user, :subscription, @payment]
pour générer des chemins pouruser_subscription_payment_path(@user, @payment)
avec les chemins commeaction="/users/21/subscription/payments/29"
.
Vous devez vous connecter pour publier un commentaire.
Malheureusement, c'est un bug. Vous devrez définir l'url que vous mentionnez.
Où est-ce que la magie chemin de venus?
Il m'a fallu beaucoup de traçage, mais j'ai finalement trouvé que le url_for détermine le chemin d'accès de votre modèle à l'aide de la
polymorphic_path
méthode définie dans ActionDispatch::Routage::PolymorphicRoutes.polymorphic_path
obtient finalement le automagic chemin d'accès de votre modèle en appelant quelque chose le long des lignes de:Je suis en simplifiant légèrement, mais c'est principalement ça. Si vous disposez d'un tableau (par exemple,
form_for[@order, @item]
) ci-dessus est appelée sur chaque élément et les résultats sont joints avec des_
.Le
model_name
méthode sur votre Classe vient de ActiveRecord::nom de.Comment puis-je le changer?
Heureusement Activerecord::Nom precalculates toutes les valeurs, y compris route_key, afin de remplacer cette valeur tout ce que nous avons à faire est de changer la valeur de la variable d'instance.
Pour la
:order
ressource dans votre question:L'essayer!