2016-04-25 6 views
1

Le code ci-dessous fonctionne bien pour créer de nouvelles transactions dans la vue Facture. Cependant, cela ne fonctionne pas dans l'espace de noms d'administrateur. ie/admin/factures/1/mais fonctionne sur/factures/1/Générateur de formulaire Rails avec espace de noms admin

show.html.erb

<%= form_for([@invoice, @invoice.transactions.build]) do |form| %> 
.... 
transactions form input 

routes.rb

resources :invoices do 
    resources :transactions 
end 
+0

Quelle est la valeur de l'attribut 'action' de la forme dans la vue rendue? – Uzbekjon

+0

/factures/1/transactions –

Répondre

0

Lorsque vous appelez form_for dans un itinéraire d'espace de noms comme /admin/invoices/1/, Rails ajoute automatiquement admin à votre itinéraire. En d'autres termes, form_for([@invoice, @invoice.transactions.build]) serait POST à ​​une route comme /admin/invoice/:id/transactions/ plutôt que /invoice/:id/transactions/.

Pour fixer, définir explicitement l'URL du formulaire et utiliser une méthode d'aide d'itinéraire pour en déduire la bonne voie:

form_for(@invoice, url: invoice_transaction_url(@invoice.id)) 

Notez que vous devrez peut-être remplacer invoice_transaction_url avec la bonne route. Utilisez rake routes pour trouver la méthode d'assistance correspondant à l'action POST du contrôleur souhaitée.

+0

Merci pour le retour rapide. Mon URL d'action est /factures/1/transactions Il semble qu'il ne soit pas ajouté. Je ne suis pas sûr si cela est correct, Après avoir soumis je reçois l'erreur "TransactionsController constantes non initialisées" et je finis à/factures/1/transactions au lieu de admin/factures/1/transactions –

+0

Quelle ligne vous donne le '" Constante non-initialisée TransactionsController "', est-ce le 'form_for'? Votre contrôleur de transactions est-il défini dans un espace de noms? –

+0

Oui est défini dans un espace de noms. ressources: factures ne ressources: transactions fin espace de noms: admin do ressources: transactions fin L'erreur qui se passe à une URL (/ factures/1/transactions) sans routes définies depuis les factures et les transactions sont seulement accédé dans admin. –