0

更新: 最初の応答の後、コードにいくつかのプットを追加しました。実際、要求されたデータはすべて、コマンド ライン内の gem から返されています。これはルビーの問題ではありません。これはレールの問題です。Rails は完全に適切なハッシュを取り、それを nil と呼んでいます。無慈悲に、私が何をしようとも、Rails はそれを nil と呼びます。

基本的に、binファイルを使用してirbから実行すると正常に実行されるgem内にメソッドがありますが、Railsコントローラーから同じメソッドを実行すると(私のgem管理スキルはかなり優れています。問題はGemfileでも何でもありません)、メソッドは nil を返します。コントロールにこれらのパラメーターを手動で入力すると、メソッド呼び出しも nil を返すため、params[] の問題ではありません (一番下のコード スニペット)。

そう:

ここにレールコントローラーがあります(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

params を入力する 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 に答える