2009-07-22 9 views
10

Cuando estaba desarrollando mis habilidades de RoR con algunos tutoriales básicos, me encontré con un problema. Lo que intento lograr es tener comentarios que pertenezcan a publicaciones, sin índice separado o vista individual. Esta parte fue fácil.Enrutamiento de rieles y identificador de fragmento de URI

Aquí viene uno difícil. Quiero post_comment_url para devolver la dirección con fragment identifier: http://example.com/posts/2#comment-4. Me permitiría usar redirect_to en su forma más simple, sin el parámetro :anchor (que sería en contra de ruby ​​way de mantener las cosas simples).

¿Cómo hacer eso?

Respuesta

12

lugar de modificar el comportamiento por defecto de Rails, probablemente sería mejor para envolver sus necesidades en un método de ayuda:

# 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 

La llamada a helper le permitirá acceder a ese método en sus puntos de vista como así como tus controladores.

+0

Probablemente esta sea una buena solución, pero no me gusta la idea de este envoltorio porque romperá la convención de utilizar el método nativo post_comment_url. También noté que necesitaría otro ayudante para post_comment_path. Como es una solución funcional, no creo que sea lo suficientemente SECA. – samuil

+0

Desafiando la convención de Rails para post_comment_url devolviendo una url de publicación con un anclaje de comentario tiende a provocar dolores de cabeza mayores que tener que pasar la opción de anclaje cada vez (lo que en realidad diría que es la mejor manera, ya que describe la intención más claramente .) También advertiría contra el uso de DRY como una razón para hacer casi cualquier cosa. El término DRY es algo así como la palabra Agile: describe una colección de principios y prácticas, no significa casi nada en sí mismo. – nakajima

+2

DRY no es una colección enigmática de principios. Simplemente significa: toda la información debe aparecer solo una vez en el código, y el diseño debe dejar claro dónde. Si no hay una solución mejor que la de helper (todavía soy bastante nuevo en Rails, no puedo decir si es fácil implementar una solución alterando algunos métodos predeterminados y considero que es inteligente). Creo que estará contenida en algunos futura versión de Rails. – samuil

Cuestiones relacionadas