更新: 最初の応答の後、コードにいくつかのプットを追加しました。実際、要求されたデータはすべて、コマンド ライン内の 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