0

ハッシュの例を次に示します (クエリごとに最大 10 個)。

parsed_response = [{"id"=>3, "pic"=>"/images/icons/market.png", "url"=>"https://angel.co/mobile-4", "名前"= >"Mobile", "type"=>"MarketTag"}, {"id"=>12, "pic"=>"/images/icons/market.png", "url"=>"https://angel .co/enterprise-software", "name"=>"エンタープライズ ソフトウェア", "type"=>"MarketTag"}, {"id"=>10, "pic"=>"/images/icons/market.png "、"url"=>"https://angel.co/saas"、"name"=>"SaaS"、"type"=>"MarketTag"}、{"id"=>841、"pic"= >"/images/icons/market.png", "url"=>"https://angel.co/software","name"=>"Software", "type"=>"MarketTag"}, {"id"=>263, "pic"=>"/images/icons/market.png", "url"=>"https ://angel.co/restaurants-2", "name"=>"レストラン", "type"=>"MarketTag"}, {"id"=>376, "pic"=>"/images/icons/ market.png", "url"=>"https://angel.co/productivity-software", "name"=>"生産性ソフトウェア", "type"=>"MarketTag"}, {"id"=> 942, "pic"=>"/images/icons/market.png", "url"=>"https://angel.co/embedded-hardware-and-software", "name"=>"組み込みハードウェアとソフトウェア", "type"=>"MarketTag"},{"id"=>291, "pic"=>"/images/icons/market.png", "url"=>"https://angel.co/meeting-software", "name"=>"ミーティングソフトウェア", "type"=>"MarketTag"}, {"id"=>13764, "pic"=>"/images/icons/market.png", "url"=>"https://angel.co /hardware-software", "name"=>"ハードウェア + ソフトウェア", "type"=>"MarketTag"}, {"id"=>2983, "pic"=>"/images/icons/market.png" , "url"=>"https://angel.co/software-compliance", "name"=>"ソフトウェア コンプライアンス", "type"=>"MarketTag"}]https://angel.co/meeting-software", "name"=>"ミーティング ソフトウェア", "type"=>"MarketTag"}, {"id"=>13764, "pic"=>"/images/ icons/market.png", "url"=>"https://angel.co/hardware-software", "name"=>"ハードウェア + ソフトウェア", "type"=>"MarketTag"}, {"id "=>2983, "pic"=>"/images/icons/market.png", "url"=>"https://angel.co/software-compliance", "名前"=>"ソフトウェア コンプライアンス", "タイプ"=>"マーケットタグ"}]https://angel.co/meeting-software", "name"=>"ミーティング ソフトウェア", "type"=>"MarketTag"}, {"id"=>13764, "pic"=>"/images/ icons/market.png", "url"=>"https://angel.co/hardware-software", "name"=>"ハードウェア + ソフトウェア", "type"=>"MarketTag"}, {"id "=>2983, "pic"=>"/images/icons/market.png", "url"=>"https://angel.co/software-compliance", "名前"=>"ソフトウェア コンプライアンス", "タイプ"=>"マーケットタグ"}], "url"=>"https://angel.co/hardware-software", "name"=>"ハードウェア + ソフトウェア", "type"=>"MarketTag"}, {"id"=>2983," pic"=>"/images/icons/market.png", "url"=>"https://angel.co/software-compliance", "name"=>"ソフトウェア コンプライアンス", "type"=>"マーケットタグ"}], "url"=>"https://angel.co/hardware-software", "name"=>"ハードウェア + ソフトウェア", "type"=>"MarketTag"}, {"id"=>2983," pic"=>"/images/icons/market.png", "url"=>"https://angel.co/software-compliance", "name"=>"ソフトウェア コンプライアンス", "type"=>"マーケットタグ"}]

作成している宝石の中で多くの方法を試しました。

最初の方法は、特別なクラスを作成し、各配列要素をそのクラスにマップすることでした:

class IDSearch
  attr_accessor :id, :thumbnail, :url, :name, :type
  def initialize(the_hash)
    @id   = the_hash['id']
    @url  = the_hash['url']
    @pic  = the_hash['pic']
    @name = the_hash['name']
    @type = the_hash['type']
  end
end

試みに従ってそれらをリストします:

Attempt 1:
IDSearch.new(parsed_response)

Attempt 2:
parsed_response.map {|t| IDSearch.new(t)}

Attempt 3:
parsed_response.each do |hsh|
SimpleAngel::IDSearch.new(hsh)
end

Attempt 4:
10.times do |i|
  instance_variable_set "@response_#{i}", parsed_response[i]        
end

Attempt 5 (getting desperate)
@response0 = parsed_response[0]
@response1 = parsed_response[1]
@response2 = parsed_response[2]
@response3 = parsed_response[3]
@response4 = parsed_response[4]
@response5 = parsed_response[5]
@response6 = parsed_response[6]
@response7 = parsed_response[7]
@response8 = parsed_response[8]
@response9 = parsed_response[9]

Attempt6: (this time inside of a rails controller)

search_object = SimpleAngel::Search.new
responses = search_object.id_search(params[:query], params[:type])
responses.each_with_index do |response, i|
  u      = Idquery.new
  u.name = response[i]['name']
  u.id   = response[i]['id']
  u.url  = response[i]['url']
  u.type = response[i]['type']
  u.pic  = response[i]['pic']
  u.save
end

これらの方法のいずれも、予測可能で首尾一貫した実行可能な反応を生み出していません。

実際の解決策というよりも、自分の考えにどのような欠陥があったかについての手がかりを探しています。

4

2 に答える 2

0
require 'ostruct'
parsed_response.map {|resp| OpenStruct.new(resp)}

特定のクラスの必要性を取り除きます。

于 2012-07-14T21:34:29.637 に答える
0

Attempt1 では、ハッシュが期待され、IDSearch.new実際には配列が渡されます。代わりに次のようにします。

parsed_response.each {|hash| p IDSearch.new(hash)}

それはうまく動作します。

@id=3, @url="https://angel.co/mobile-4", @pic="/images/icons/market.png", @name="Mobile", @type="MarketTag"
于 2012-07-14T10:17:21.837 に答える