2017-02-02 1 views
1

Ich versuche, URL-Helfer von resolve Methoden in graphql-ruby zu Feldern wie url zu generieren. Ich weiß, ich kann dies tun:Include URL-Helfer in graphql-Ruby Resolver

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 

Ich weiß, es zu include Rails.application.routes.url_helpers in Ihren Modellen möglich ist, jeden Anruf zu vermeiden prefixing aber, wie zu tun dies mit graphql-ruby?

Darüber hinaus, wenn ich event_url aufrufen, hat es nicht Host und Port. Offensichtlich möchte ich es vermeiden, jedem Helferanruf host: request.host hinzuzufügen.

Antwort

1

ich es durch die Schaffung von config/initializers/graphql.rb gelöst haben, die url_helpers in den Resolver Kontext injiziert:

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

Wie für den Host und Port, sieht es aus wie

# 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 

funktioniert der Trick. Ich habe dies in einen separaten Initialisierer eingefügt, obwohl ich vermute, dass das Hinzufügen zu config/routes.rb auch funktionieren würde.

+0

Sie können auch "ActionController :: Helfer" für andere Helfer hinzufügen, die Sie in Controllern verfügbar haben. –