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

Pet*_*ela 2 ruby ruby-on-rails graphql

我正在尝试从graphql-ruby中的resolve方法访问url helpers 以生成类似的字段.我知道我可以这样做: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
Run Code Online (Sandbox Code Playgroud)

我知道include Rails.application.routes.url_helpers在你的模型中可以避免为每个调用添加前缀但是如何使用graphql-ruby执行此操作?

另外,如果我打电话event_url,它没有主机和端口.显然,我想避免添加host: request.host到每个帮助程序调用.

Pet*_*ela 5

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

module GraphQL
  module Define
    class DefinedObjectProxy
      include Rails.application.routes.url_helpers
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

至于主机和端口,它看起来像

# 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
Run Code Online (Sandbox Code Playgroud)

诀窍.我已经将它插入一个单独的初始化程序,虽然我怀疑它也config/routes.rb可以添加它.

  • 你还可以为你曾经在控制器中使用的其他助手"包含ActionController :: Helpers". (2认同)