2017-02-02 8 views
1

resolveのメソッドからgraphql-rubyのURLヘルパーにアクセスして、urlのようなフィールドを生成しようとしています。私はこれを行うことができます知っている:グラフヘルパーをgraphql-rubyリゾルバに含める

EventType = GraphQL::ObjectType.define do 
    field :url, !types.String do 
    resolve ->(event, _args, _ctx) do 
     Rails.application.routes.url_helpers.event_path event 
    end 
    end 
end 

私はそれがすべての呼び出しを前置避けるために、あなたのモデルでinclude Rails.application.routes.url_helpersすることが可能です知っているが、graphql-ルビーでこれを行うにはどのように?

さらに、event_urlを呼び出すと、ホストとポートはありません。明らかに、私はすべてのヘルパーコールにhost: request.hostを追加することを避けたいと思います。私はリゾルバのコンテキストにurl_helpersを注入config/initializers/graphql.rb作成することによって、それを解決してきました

答えて

1

:ホストとポートについては

module GraphQL 
    module Define 
    class DefinedObjectProxy 
     include Rails.application.routes.url_helpers 
    end 
    end 
end 

# Allow to build url from models or graphql without needing to pass host/port every time 
Rails.application.routes.default_url_options = Rails.application.config.action_mailer.default_url_options 

はトリックを行うように、それが見えます。 config/routes.rbに追加すると思われますが、これを別のイニシャライザに挿入しました。

+0

また、コントローラーで使用できる他のヘルパーのために 'ActionController :: Helpers'を含めることもできます。 –