我想在我的服务对象中提供路线助手。
例如:
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中的应用程序名称。
该相对路径适用于我的应用程序中的其他任何位置,它只是不能正确生成服务对象中的相对路径。
答案 0 :(得分:1)
问题是PORO无法使用与行动视图相关的方法。
为了从动作视图中获取所有优秀内容:您需要使用view_context
关键字。然后:您只需调用view_context
:
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
有关详细信息,请参阅以下参考资料:
view_context
,如this article view_context
进行讨论