【问题标题】:Why is rails not showing my API call results?为什么 rails 没有显示我的 API 调用结果?
【发布时间】:2019-11-13 12:42:19
【问题描述】:

我对 ruby​​ on rails 完全陌生,我正在创建一个简单的文章搜索应用程序,该应用程序将使用 Guardian API 并仅显示新闻标题。 我做了一个简单的视图、控制器和一个调用外部 API 的类,但结果没有显示在我的页面上,我很困惑。它只需要这样工作:用户进入页面,填写搜索表单并查看新闻标题。我正在使用 httparty gem。

API 消费者类:

#app/clients/guardian_api_client.rb

class GuardianApiClient
  include HTTParty  

  API_KEY = ENV['GUARDIAN_CONTENT_API_KEY']
  BASE_URL ="https://content.guardianapis.com/search?" 
  API_PARTIAL_URL = "api-key=#{API_KEY}"


  def query(q)
      request = HTTParty.get(BASE_URL+"q=#{q}&""api-key=#{API_KEY}")
      puts request
  end

end

控制器:

class SearchController < ApplicationController
    def search
        @app = GuardianApiClient.new
        @results = @app.query(params[:q])
    end
end

查看:

<%= form_with(url: '/search') do |f| %>
<%= f.text_field :q %>
<%= f.submit 'search' %>
<% end %>

<% if @results != nil %>
  <ul>
  <%= @results.each do |r| %>
  <li><%= r["webTitle"] %></li>
  <% end %>
  </ul>
<% else %>
  <p>No results yet</p>
<% end %>

路线:

Rails.application.routes.draw do
  get '/search' => 'search#search'
  post '/search' => 'search#search'
end

【问题讨论】:

    标签: html ruby-on-rails ruby httparty


    【解决方案1】:

    在 API 客户端中,您使用 puts 打印结果:

      def query(q)
          request = HTTParty.get(BASE_URL+"q=#{q}&""api-key=#{API_KEY}")
          puts request
      end
    

    puts 返回nil,所以控制器没有得到结果。您需要从您的 query 方法返回请求:

      def query(q)
          request = HTTParty.get(BASE_URL+"q=#{q}&""api-key=#{API_KEY}")
          puts request
          request
      end
    

    (ruby 返回方法中最后一次调用的结果)。

    【讨论】:

    • 谢谢!结果现在显示在页面上,但是,它是一个大的哈希数组,而不仅仅是文章的标题。有什么简单的方法只显示标题吗?
    • 您需要选择它们。问另一个问题并在此处粘贴显示的内容。
    • 我把请求结果贴在了这个帖子里:stackoverflow.com/questions/58846594/…
    猜你喜欢
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    相关资源
    最近更新 更多