2011-03-05 51 views
13

问题有很多评论。覆盖路线帮手方法

URL“questions/123”显示一个问题。

的URL:

“的问题/ 123#答案-345”

显示了一个问题,突出一个答案。 345 - 是Answer模型的id,“answer-345”是HTML元素的id属性。

我需要重写 “answer_path(一)” 的方法来获得

“的问题/ 123#答案-345”

,而不是

“的答案/ 345 “

怎么办?

回答

16

所有url和路径帮助器方法都接受可选参数。
什么你要找的是争论anchor

question_path(123, :anchor => "answer-345") 

它记录在URLHelper#link_to examples

使用这种说法,你应该能够通过创建answer_path帮手:

module ApplicationHelper 

    def answer_path(answer) 
    question_path(answer.question, :anchor => "answer-#{answer.id}") 
    end 

end 
+0

不,我确实需要它。 answer_path实际上应该指向它的Question的路径,并且还附加散列部分。 – AntonAL

+0

用辅助方法更新了答案。希望这对你有用。 – rubiii

+1

谢谢。这个方法应该放在哪里,优先于默认的answer_path? – AntonAL

0

提供覆盖更多的区域(作品不仅在视图中,而且在控制器/控制台)

module CustomUrlHelper 
    def answer_path(answer, options = {}) 
    options.merge!(anchor: "answer-#{answer.id}") 
    question_path(answer.question, options) 
    end 
end 

# Works at Rails 4.2.6, for earliers versions see http://stackoverflow.com/a/31957323/474597 
Rails.application.routes.named_routes.url_helpers_module.send(:include, CustomUrlHelper) 
的解决方案