2017-04-21 7 views
0

自分のサービスオブジェクトでルートヘルパーを利用できるようにしたいと考えました。Railsルートヘルパーメソッドがサービスオブジェクトに正しく含まれていない

例:

blog_path(blog) #make available in service object 

問題は、私が乗客を使用していますということなので、アプリケーションは、ドメインに相対です。

例:パスのロードではなく、www.my_domain.com/blog/1の代わりに、乗客はパスをwww.my_domain.com/this_app/blog/1でロードします。

現在、私のサービスオブジェクトの私のルートヘルパーは、第1のバージョンをレンダリングしており、第2のバージョンはレンダリングしていません。ここで

は私のサービスオブジェクトがどのように見えるかです:ローカルホスト上で、私は相対パスを持っていないので、

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 

ルートがローカルで動作します。しかし、プロダクションに入れると、乗客はアプリケーション名を相対パスとして期待していますが、サービスオブジェクトは生成するURL内にアプリケーション名を含めていないため動作しません。

この相対パスは、アプリケーション内のどこでも動作しますが、サービスオブジェクト内の相対パスは適切に生成されません。

答えて

0

問題は、アクションビューに関連するメソッドを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 

したがって、たとえば:詳細については、

BuildLink.new(@blog, view_context).init 

:あなたのコントローラから、あなたはそうのようなこのポロ時に呼び出します下記参照:PRを経由してview_context

関連する問題