Rails中如何正确显示搜索结果?搜索城市始终返回纽约数据
问题修复说明
根因
HomeController的index方法中,调用天气接口的查询参数被硬编码为固定值New York,没有读取用户提交的搜索参数,导致无论输入任何城市,接口请求始终查询纽约的天气数据。
修复步骤
修改HomeController中@params的query字段赋值逻辑,优先读取用户提交的query参数,无提交参数时使用默认值New York即可。
修复后完整代码:
class HomeController < ApplicationController def index require 'net/http' require 'json' @params = { :access_key => "1dbc1a3aa6b2e76a0c8eda1cba0c9c8b", # 优先取用户提交的query参数,为空则用默认值New York :query => params[:query].presence || "New York" } @uri = URI("http://api.weatherstack.com/current") @uri.query = URI.encode_www_form(@params) @json = Net::HTTP.get(@uri) @api_response = JSON.parse(@json) if @params[:query].empty? @city = "Enter city" @temperature = "(in English)" else @city = " #{@api_response['location']['name']}" @temperature = "#{@api_response['current']['temperature']}°" end end end
注:顺便优化了URI初始化逻辑,原代码先拼接了带参数的URI,后续又用
encode_www_form覆盖了query字段,属于冗余逻辑,直接初始化基础接口地址即可。
验证
修改完成后重启服务,输入城市名搜索即可返回对应城市的天气数据。
内容的提问来源于stack exchange,提问作者Maksym
相关产品推荐
相关产品推荐

