更新:在第一个响应之后,我在代码中添加了一些放置,实际上,所有请求的数据都从命令行内的 gem 返回。这不是红宝石问题。这是一个轨道问题。Rails 采用了一个非常好的哈希并将其称为 nil。无情地,无论我做什么,rails 都将其称为 nil。
基本上,我在 gem 中有一个方法,它在使用 bin 文件从 irb 运行时成功运行,但是当我从 rails 控制器运行相同的方法时(我的 gem mgmt 技能非常好,不是 Gemfile 或任何问题),该方法返回 nil。这也不是 params[] 问题,因为当我在控件中手动填写这些参数时,方法调用也返回 nil(最低代码片段)
所以:
这是 rails 控制器(simple_search 方法返回 nil)
def show
obj = SimpleSearch.new
@responses = obj.broad_search(params[:query], params[:type])
end
这是我的自定义 gem 中的 broad_search 方法(我已经完成了所有正确的“rake build”、gem 版本控制、sudo gem install pkg/....、rails Gemfile 和 bundle install 的东西相信我)
def broad_search(query, type)
response = HTTParty.get("#{SEARCH_URL}/search?query=#{query}&type=#{type}")
# the below parsed_response is going to be an array of hashes if successful
p_response = JSON.parse(response.body)
p_response.map {|r| Results.new(r)}
end
运行 API 响应的类
class Results
attr_accessor :identification, :picture, :address, :name, :type
def initialize(input)
@identification = input['id']
@address = input['url']
@picture = input['pic']
@name = input['name']
@type = input['type']
end
end
bin 文件,它完全能够运行该方法,因此稍后解析(使用)哈希 --- 在 rails 中,我将使用这些内容将哈希保存到数据库中,以开始生成哈希信息的存档
$LOAD_PATH.unshift(File.expand_path("../lib", File.dirname(__FILE__)))
require 'simple_search'
require 'highline/import'
class UI
def initialize
@search = Search.new
end
def broad_search_from_terminal
type = ask("What type? Choose 'User', 'Startup', 'MarketTag' or 'LocationTag'")
query = ask("OK. Assuming you chose one of the four types, what is your search keyword?")
@search.broad_search(query, type)
end
end
我会显示填写参数的rails视图文件,但这也返回nil(通过inspect方法等输出)
def show
obj = SimpleSearch.new
@responses = obj.broad_search("mark", "User")
end