扩展现有的Rails路径助手

3
我想知道是否有办法扩展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

显然将此放入模块中会导致无限递归,因此我想知道是否有任何最佳实践来解决这个问题。
另外,您认为这种方法怎么样?我不确定像这样扩展助手是否明智。但是在目前看来,它看起来还可以。

2
我个人会更改助手名称。或者你可以直接调用 super() 而不是同名方法。 - Lee Jarvis
那么我必须扩展它,还是只能创建一个普通的“模块”,简单地覆盖方法名称? - Tigraine
将它们放入一个辅助模块中,然后可以将其包含到ActionController中(这样路径也可以在控制器中使用)。 - Lee Jarvis
请回答问题,这样我就可以将其标记为已接受。完美地工作了。谢谢。 - Tigraine
1个回答

5

把它们放在一个帮助模块中并调用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接