2009-07-22 12 views
10

Lorsque j'ai développé mes compétences RoR avec quelques tutoriels de base, j'ai rencontré un problème. Ce que j'essaye de réaliser, c'est d'avoir des commentaires appartenant à des publications, sans index séparé ni vue individuelle. Cette partie était facile.Rails de routage et identificateur de fragment d'URI

Voici une question difficile. Je veux post_comment_url pour retourner l'adresse avec fragment identifier: http://example.com/posts/2#comment-4. Il me permettrait d'utiliser redirect_to dans sa forme la plus simple, sans :anchor paramètre (ce qui serait contre ruby ​​manière de garder les choses simples).

Comment faire?

Répondre

12

Au lieu de modifier le comportement par défaut de Rails, il serait probablement préférable d'envelopper vos besoins dans une méthode d'assistance:

# in app/controllers/application_controller.rb 
class ApplicationController 
    helper :comment_link 

    def comment_link(comment) 
    post_comment_url(comment.post, comment, :anchor => "comment-#{comment.id}") 
    end 
end 

L'appel à helper vous permettra d'accéder à cette méthode dans votre point de vue ainsi que vos contrôleurs.

+0

Probablement c'est une bonne solution, mais je n'aime pas l'idée de ce wrapper car cela va casser la convention d'utiliser la méthode native post_comment_url. J'ai aussi noté que j'aurais besoin d'un autre assistant pour post_comment_path. Comme c'est une solution de travail, je ne pense pas que c'est assez sec. – samuil

+0

Défier la convention Rails pour post_comment_url en retournant une URL de post avec une ancre de commentaire tend à causer des maux de tête plus importants que de devoir passer l'option: anchor à chaque fois (ce qui est la meilleure solution) Je voudrais également mettre en garde contre l'utilisation de DRY comme une raison de faire presque n'importe quoi. Le terme DRY est un peu comme le mot Agile: il décrit une collection de principes et de pratiques, cela ne signifie presque rien par lui-même. – nakajima

+2

DRY n'est pas une collection énigmatique de principes. Cela signifie simplement que toutes les informations ne doivent apparaître qu'une seule fois dans le code, et le design devrait indiquer clairement où. S'il n'y a pas de meilleure solution que helper (je suis encore assez nouveau pour Rails, donc je ne peux pas dire du tout s'il est facile de mettre en œuvre une solution en modifiant certaines méthodes par défaut et de le considérer intelligent). future version de Rails. – samuil