为什么 rails 没有显示我的 API 通话结果?

Why is rails not showing my API call results?

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

API消费者class:

#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

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

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

puts returns nil,所以控制器得不到结果。您需要 return 从您的 query 方法请求:

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

(ruby return是方法中最后一次调用的结果).