【问题标题】:Include url helpers in graphql-ruby resolvers在 graphql-ruby 解析器中包含 url 助手
【发布时间】:2017-02-03 02:04:55
【问题描述】:

我正在尝试从graphql-ruby 中的resolve 方法访问url 帮助程序,以生成像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

【问题讨论】:

    标签: ruby-on-rails ruby graphql


    【解决方案1】:

    我通过创建config/initializers/graphql.rburl_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 也可以,但我已将其插入到单独的初始化程序中。

    【讨论】:

    • 您也可以include ActionController::Helpers 为您习惯在控制器中使用的其他助手提供帮助。
    • 例如,我如何在解析器类中使用 Rails 助手?
    猜你喜欢
    • 2018-03-26
    • 2019-10-05
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2020-04-24
    • 2020-03-10
    • 1970-01-01
    • 2014-05-07
    相关资源
    最近更新 更多