扩展现有的Rails Path助手

Tig*_*ine 3 ruby ruby-on-rails ruby-on-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
Run Code Online (Sandbox Code Playgroud)

显然,将其放在模块中将导致无休止的递归,所以我想知道是否有关于此操作的最佳实践。

另外,您如何看待这种方法?我真的不确定像这样扩展辅助程序是否明智。但目前看来,这是合理的。

Lee*_*vis 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
Run Code Online (Sandbox Code Playgroud)