在graphql-ruby解析器中包含url helpers

时间:2017-02-02 18:04:56

标签: ruby-on-rails ruby graphql

我正在尝试从graphql-ruby中的resolve方法访问网址助手,以生成url等字段。我知道我可以这样做:

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-ruby执行此操作?

此外,如果我拨打event_url,它没有主机和端口。显然,我想避免在每个助手调用中添加host: request.host

1 个答案:

答案 0 :(得分:5)

我通过创建config/initializers/graphql.rb来解决它,将url_helpers注入解析器的上下文中:

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也可以。