1

J'utilise Ruby on Rails 3.0.9 et je voudrais construire un nom de contrôleur à partir d'un nom de classe, ainsi que possible aux conventions de dénomination RoR. Par exemple, si j'ai la classe Articles::Comment, je voudrais récupérer la chaîne articles/comments.Récupérer le nom du contrôleur à partir d'un nom de classe suivant les conventions de RoR

Peut-être qu'il existe une méthode RoR créée par les développeurs pour gérer en interne ces conventions, mais je ne sais pas.

Comment puis-je récupérer le nom du contrôleur comme dans l'exemple ci-dessus?

Répondre

3

Vous recherchez la méthode de soulignement. More info here.

"Articles::Comment".underscore 

Ou, si vous avez la classe contrôleur lui-même, ce serait comme ceci:

Articles::Comment.name.underscore 

EDIT

Comme des routes, ils sont construits une seule pièce à temps, même lorsque vous les espace de noms. Quand vous faites quelque chose comme ceci:

map.resources :articles do |articles| 
    articles.resources :comments 
end 

Qu'est-ce que les rails va faire est, d'abord:

"articles". classify # which yields "Article" then rails is going to append "Controller" to it 

Ensuite, il va se faire « commentaires » et faire la même chose, mais celui-ci va être routé sous "/ articles". Rails ne gère pas les ressources internes de l'espace de noms, donc le contrôleur doit être CommentsController, pas Articles :: CommentsController.

Alors seulement, vous espace de nom clairement quelque chose, Rails va namespace vos classes:

map.namespace :admin do |admin| 
    admin.resources :articles # will require controller "Admin::ArticlesController" 
end 

J'espère que ce sera plus clair maintenant.

+0

En utilisant votre code, j'aurai besoin d'appeler aussi la méthode 'pluralize' ... mais est-ce ainsi que RoR gère ces conventions de nommage en interne? – Backo

+0

On dirait que j'ai mal compris votre question, je n'ai pas remarqué le pluriel, c'est ainsi que Rails génère des noms pour les chemins, comme dans articles_comment_path, pas pour les routes. Sur les routes, chaque morceau est son propre nom, c'est le nom de la classe. –

+0

Maintenant mis à jour pour couvrir les conventions de nommage du contrôleur. –

Questions connexes