我想知道是否有办法扩展Rails为我的路由创建的现有路径助手。
我已经有类似/videos/view/:id
的内容了,现在我需要在任何地方(来自当前的params
集合)向该链接追加一个标记参数。
我现在看到的唯一解决方案是浏览所有视图并将对助手的调用更改为如下所示:
view_videos_path(video, tag: params[:tag])
现在很明显,这是一项工作,更简单的方法就是用这样的方式覆盖现有的路径助手:
def view_videos_path(video, opts)
view_videos_path(video, opts.merge(tag: params[:tag]))
end
显然把它放在一个模块中会导致无休止的递归,所以我想知道是否有关于如何做到这一点的最佳实践。
另外,您如何看待这种方法?我不确定是否扩展这样的帮助是明智的。但对我而言,这看起来很合理。
答案 0 :(得分:4)
将它们放在帮助程序模块中并调用super
,您也可以将其包含在ApplicationController
中,以便控制器中也可以使用这些路径:
# app/helpers/path_helpers.rb
module PathHelpers
def view_videos_path(video, opts)
super(video, opts.merge(tag: params[:tag]))
end
end
class ApplicationController
include PathHelpers # we could also use helper_method for each method
end