2010-11-23 2 views
2

J'essaie d'écrire un plugin, et parmi les tâches que je veux effectuer, je veux être en mesure d'appeler des méthodes d'assistance route à partir du plugin. Par exemple, si j'ai map.resources :user, je veux être en mesure d'appeler user_path(:id => 1) de mon plugin. Je continue d'obtenir une erreur de méthode utilisateur non définie.Rails 2 assistants route dans le plugin

Dans les rails 3, vous pouvez le faire en utilisant Rails.application.routes.url_helpers, mais je ne semble pas être en mesure de trouver une alternative pour les rails 2. Y compris ActionController::UrlWriter n'aide pas. Des idées?

Répondre

2

J'utilise des rails et je peux 2.3.4 utiliser mes aides de chemin réguliers dans les contrôleurs et les vues de mes plugins, au moins dans les i testés .

Je ne peux pas les utiliser dans les fichiers lib pour les plugins, mais parce que les helpers ne sont pas disponibles en dehors des contrôleurs (les vues sont traitées dans les contrôleurs pour pouvoir les utiliser aussi). Les fichiers lib (la viande des plugins) ont tendance à être des modules et des classes qui sont chargés dans l'environnement du modèle.

Pouvez-vous fournir plus de détails sur ce que vous essayez de faire?

+0

J'essaie de réparer le [gretel breadcrumbs plugin] (https://github.com/lassebunk/gretel /) pour être compatible avec les rails 2. Le problème comme vous l'avez indiqué est dans les fichiers lib, avez-vous des suggestions? – Faisal

+0

Vous aviez raison sur l'argent, le problème était que j'essayais de les utiliser dans les fichiers lib, au lieu de controller/view/helper. Je ne l'ai pas attrapé rapidement parce que j'utilisais des lambdas et que je ne comprenais pas très bien les fermetures (le lambda était appelé dans l'assistant, mais il avait la portée du fichier lib). Merci pour votre réponse. – Faisal

+1

Pouvez-vous partager la solution? Parce que je ne peux pas comprendre à partir de ces commentaires, comment avez-vous utilisé le plugin avec des rails 2.3 –

0

Vous devriez être en mesure de le faire:

app.user_path(1) 
+0

cela fonctionne à partir de la console, mais dans mon plugin, il est dit: variable locale non définie ou méthode "app" – Faisal