Rails Route Helper服务对象中包含的方法无法正常工作

时间:2017-04-21 17:16:56

标签: ruby-on-rails ruby

我想在我的服务对象中提供路线助手。

例如:

blog_path(blog) #make available in service object

问题是我正在使用乘客,因此应用程序相对到域中。

Ex:乘客使用www.my_domain.com/blog/1加载路径,而不是加载路径www.my_domain.com/this_app/blog/1

目前,我的服务对象中的路由助手正在渲染第一个版本,而不是第二个版本。

以下是我的服务对象:

class BuildLink
  include ActionView::Helpers::TagHelper
  include ActionView::Helpers::UrlHelper
  RouteHelpers = Rails.application.routes.url_helpers

  attr_accessor :blog

  def initialize(blog)
    @blog = blog
  end

  def init
    content_tag(:li, link_to(“Show Blog“, RouteHelpers.blog_path(blog)))
  end
end

该路由在本地工作,因为在localhost上我没有相对路径。但是当我把它投入生产时它不起作用,因为乘客期望应用程序名称作为相对路径,但服务对象不包括它生成的url中的应用程序名称。

该相对路径适用于我的应用程序中的其他任何位置,它只是不能正确生成服务对象中的相对路径。

1 个答案:

答案 0 :(得分:1)

问题是PORO无法使用与行动视图相关的方法。

为了从动作视图中获取所有优秀内容:您需要使用view_context关键字。然后:您只需调用view_context

中与actionview相关的方法即可
class BuildLink
  attr_accessor :blog, :view_context

  def initialize(blog, view_context)
    @blog = blog
    @view_context = view_context
  end

  def init
    content_tag(:li, link_to(“Show Blog“, view_context.blog_path(blog)))
  end
end

例如:从您的控制器中,您可以像这样调用此PORO:

BuildLink.new(@blog, view_context).init

有关详细信息,请参阅以下参考资料: