Ruby on rails 扩展现有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[:
/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
中(这样,您的控制器中也可以使用路径)继续回答这个问题,这样我就可以把它标记为已接受。。工作得很好。。谢谢