我正在尝试从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
。
答案 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
也可以。