2010-04-26 6 views
0

i ont une application RoR Log, qui similaire à l'application du magasin de livres, mon logs_controller a toute action par défaut: index, exposition, mise à jour, créer, supprimer ..rubis sur des rails en ajoutant nouvelle route

maintenant je dois ajouter une nouvelle action: ToCSV, je l'ai définie dans logs_controller, et ajouter de nouveaux parcours dans la config/routes comme:

map.resources :logs, :collection => { :toCSV => :get }.

de RIR, j'ai vérifié les routes et voir les nouvelles routes déjà ajouté:

 
>> rs = ActionController::Routing::Routes 
>> puts rs.routes 
GET /logs/toCSV(.:format)?     {:controller=>"logs", :action=>"toCSV"} 

a ensuite couru la commande 'rake routes' dans shell, il est revenu:

 
toCSV_logs GET /logs/toCSV(.:format)   {:controller=>"logs", :action=>"toCSV"} 

tout semble fonctionner. enfin dans mon code de vues, j'ajouté ce qui suit:

link_to 'Export to CSV', toCSV_logs_path

lorsque l'accès dans la Brower 'http://localhost:3000/logs/toCSV', il se plaignait: Impossible trouver Connectez-vous avec ID = ToCSV

j'ai vérifié dans le script/serveur, et a vu celui-ci:

 
ActiveRecord::RecordNotFound (Couldn't find Log with ID=toCSV): 
    app/controllers/logs_controller.rb:290:in `show' 

semble quand je clique sur ce lien, le diriger à l'action « show » au lieu de « ToCSV », donc il a fallu « ToCSV » comme id ... quelqu'un sait pourquoi cela arriverait-il? et pour le réparer? Merci ...

+0

quelle est la version de rails? Et montrez votre méthode toCSV dans le contrôleur – fl00r

+0

Vous avez probablement quelque chose comme ceci log GET /logs/:id(.:format) {: controller => "logs,: action",: action => "show"} – jigfox

Répondre

1

Cela peut être une solution de contournement: Créer une ressource nommée:

map.toCSV 'logs\toCSV', :controller => :logs, :action => :toCSV

Je suis vraiment désolé, j'oublié de mentionner le principal point!

À votre avis, il devrait être:

link_to 'Export to CSV', toCSV_path

En outre, ces routes nommées être utiles surtout quand vous avez l'authentification impliqué. Par exemple, lors de l'inscription, plutôt que de diriger l'utilisateur vers \user\new, vous pouvez le diriger vers \signup. C'est plus amical.

C'est tout!

C'est plus simple et cela fonctionne. À votre santé! :)

+0

celui-ci fonctionne, merci! :) – ohana

+0

Vous êtes les bienvenus :) –

0

Supprimez la ligne map.resources de routes.rb, puis exécutez les routes rake. Si vous voyez une route/logs /: id, c'est la route qui devrait probablement être supprimée.

2
map.resources :logs, :collection => { :toCSV => :get } 

Je pense que c'est parfait. vous devez redémarrer votre serveur chaque fois que vous changez le fichier config/routes.rb Ce n'est pas une réponse mais c'est important.

+0

Si vous utilisez webrick vous n'avez pas besoin de redémarrer votre serveur après avoir changé de route. – Sohan

+0

Si vous utilisez l'environnement * development *, vous n'avez pas besoin de redémarrer le serveur –

Questions connexes