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

显然把它放在一个模块中会导致无穷无尽的递归,所以我想知道是否有任何关于如何做到这一点的最佳实践。

另外,你觉得这个方法怎么样?我不确定像这样扩展助手是否明智。但在我看来,这似乎是合理的。

4

1 回答 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
于 2012-07-17T10:55:46.380 回答