Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何访问块内的实例变量_Ruby On Rails_Ruby_Graphql_Block - Fatal编程技术网

Ruby on rails 如何访问块内的实例变量

Ruby on rails 如何访问块内的实例变量,ruby-on-rails,ruby,graphql,block,Ruby On Rails,Ruby,Graphql,Block,我正在使用gem&希望它对不同的URL和令牌具有动态性 gem文档和其他地方给出的示例具有硬编码的URL和令牌 我正在尝试访问@shop.token内def头块GraphQL::Client::HTTP class Graphql def initialize(shop_id) @shop = Shop.find_by(shop_id) end def http GraphQL::Client::HTTP.new("http://graphql-swap

我正在使用gem&希望它对不同的URL和令牌具有动态性

gem文档和其他地方给出的示例具有硬编码的URL和令牌

我正在尝试访问
@shop.token
def头
GraphQL::Client::HTTP

class Graphql

  def initialize(shop_id)
    @shop = Shop.find_by(shop_id)
  end

  def http
    GraphQL::Client::HTTP.new("http://graphql-swapi.parseapp.com/") do
      def headers(context)
        { 
          "User-Agent": "My Client",
          "Token" : @shop.token
        }
      end
    end
  end

  def client
      schema = GraphQL::Client.load_schema(http{@shop})
      
      @client ||= GraphQL::Client.new(schema: schema, execute: http{@shop}).tap do |client|
        client.allow_dynamic_queries = true
      end
  end

end
Rails可以通过
yield
self.instance\u eval(&block)
但是我们可以在headers方法中访问@shop,使令牌成为动态的


graphql客户端http类是如何定义的

在代码中,您实际如何使用客户端?感觉可能您可以将令牌作为上下文的一部分传递,即
“token”:context[:token]
?类似于如何操作?您可以尝试使用lambda
{“用户代理”:“我的客户机”,“令牌”:lambda{@shop.Token}
。但是它不能直接工作,您必须将它与
一起使用。调用
@TomLord我已经更新了客户端的代码,您能看一下吗?好的,您如何构造查询?同样,只要看一下自述,就会将
上下文
传递到每个查询中。那么将
令牌:@shop.token
与每个查询一起传递是否可行?例如,您是否定义了一个
Graphql#query
方法?@TomLord谢谢,在调用query方法时,将尝试通过上下文传递它