Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 扩展现有Rails路径辅助对象_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 扩展现有Rails路径辅助对象

Ruby on rails 扩展现有Rails路径辅助对象,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我想知道是否有一种方法可以扩展Rails为我的路线创建的现有路径帮助器 我已经有了类似于/videos/view/:id的东西,现在我需要在链接的任何位置(从当前参数集合)附加一个标记参数 我现在看到的唯一解决方案是遍历所有视图,并将对帮助器的调用更改为如下所示: def view_videos_path(video, opts) view_videos_path(video, opts.merge(tag: params[:tag])) end 查看视频路径(视频,标记:params[:

我想知道是否有一种方法可以扩展Rails为我的路线创建的现有路径帮助器

我已经有了类似于
/videos/view/:id
的东西,现在我需要在链接的任何位置(从当前
参数
集合)附加一个标记参数

我现在看到的唯一解决方案是遍历所有视图,并将对帮助器的调用更改为如下所示:

def view_videos_path(video, opts)
  view_videos_path(video, opts.merge(tag: params[:tag]))
end
查看视频路径(视频,标记:params[:tag])

显然,这需要做一点工作,更简单的方法是用如下内容覆盖现有的路径帮助器:

def view_videos_path(video, opts)
  view_videos_path(video, opts.merge(tag: params[:tag]))
end
显然,将其放在模块中会导致无休止的递归,所以我想知道是否有关于如何实现这一点的最佳实践


另外,你认为这种方法怎么样?我不确定这样扩展助手是否明智。但对我来说,目前它看起来是合理的。

将它们放入帮助器模块并调用
super
,您还可以将其包含到
应用程序控制器中
中,以便在控制器中也可以使用路径:

# 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

我会亲自更改助手的名称。或者,您可以直接调用
super()
而不是相同的方法名,因此我必须对其进行扩展,或者我可以创建一个常规的
模块
,该模块只覆盖方法名吗?将它们放入帮助器模块中,您可以将其包含在
ActionController
中(这样,您的控制器中也可以使用路径)继续回答这个问题,这样我就可以把它标记为已接受。。工作得很好。。谢谢