2010-12-15 23 views
1

Je viens d'emménager à l'aide Rails 3.0.3 sur mon Mac OS X.Configurer routes.rb pour Rails 3.0

Lorsque j'ai essayé de générer des contrôleurs et vues comme suit:

$rails generate controller testing 

il a créé le contrôleur à l'endroit approprié. j'ai créé une méthode/action dans le même contrôleur appelé greet et quand je l'ai essayé d'accéder à ce via le navigateur à l'adresse:

http://localhost:3000/testing/greet 

Il m'a donné une erreur en disant:

Routing Error 

No route matches "/testing/greet" 

Mais si j'ajoute la ligne suivante dans mon fichier routes.rb:

get 'testing#greet' 

il fonctionne très bien, mais, je ne peux pas ajouter la ligne ci-dessus pour chaque méthode dans ma demande.

S'il vous plaît aidez-moi sur la façon de résoudre ce problème.

Merci!

Répondre

2

Il ne complique pas trop.

En supposant le test est resoucedful, dans les routes:

resources :testings do 
    # for individual /testing/1/greet 
    member do 
    get 'greet' 
    end 

    # on the collection 
    collection do 
    get 'greet' 
    end 
end 
+0

La réponse simple à votre question est "Chaque route a besoin d'être définie" – sethvargo

+0

Merci Seth pour votre réponse, mais je crois que si je continue à définir chaque route dans mon fichier routes.rb alors je vais compliquer les choses et mon fichier routes.rb ne sera pas bon. de toute façon, merci pour votre réponse. J'ai figuré celui-ci et posterai la réponse sous peu. –

+0

Je reviens sur cette question et me sens si naïf :) Avance rapide de 2 ans - Je suis un pro chez Rails et Ruby :) –

0

Vous compliquez le routage. S'il vous plaît lire le Routing Guide pour l'illumination.

+1

Je suis désolé si je complique les choses, mais la réponse nécessite une ligne simple dans le fichier 'routes.rb' pour fonctionner:' match ': controller /: action'' –

-1

Si vous venez de Rails 2.x à Rails 3.0, votre fichier routes.rb est probablement manquant cette ligne:

match ':controller/:action' 

Dans Rails 2.x cette ligne était:

map.connect ':controller/:action' 

En raison de la modification de l'API de routage et int Vous devez ajouter la première ligne de votre fichier routes.rb pour mapper toutes les méthodes automatiquement. PS: N'oubliez pas que si vous devez remplacer le routage ci-dessus, vous devez déclarer les commandes de routage au-dessus de cette ligne, car la priorité dans Rails Routing est basée sur une approche descendante.

Merci!

+1

Cette route fourre-tout est fortement déconseillée et est considérée comme obsolète. Les routes de style REST telles que détaillées sur http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default sont la voie à suivre. –

+0

Bonjour Brian, ça pourrait être le cas. Mais, depuis que je suis passé à Rails 3 de Rails 2, il me manquait déjà ce que j'avais dans Rails 2.Je suis toujours en train de parcourir tous les guides et la documentation API pour confirmer les standards de Rails 3. Mais, pour l'instant, c'est exactement ce que je cherchais à tester sur Rails 3. Maintenant, comme je sais qu'il a été déprécié, je vais regarder dans quelle version polie a été introduite dans Rails 3 et commencera à l'utiliser dans Production. Merci encore! –