0

更新:在第一个响应之后,我在代码中添加了一些放置,实际上,所有请求的数据都从命令行内的 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
4

1 回答 1

0

我会broad_search以这种方式修改方法:

def broad_search(query, type)
  url = "#{SEARCH_URL}/search?query=#{query}&type=#{type}"
  response = HTTParty.get(url)

  puts url
  puts response.body      

  # 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

看看每种情况有什么不同。

于 2012-07-15T14:11:54.720 回答