【问题标题】:Rails: How to iterate over products from hash? (Amazon API / Vacuum)Rails:如何从哈希中迭代产品? (亚马逊 API / 真空)
【发布时间】:2014-05-01 21:54:12
【问题描述】:

Rails: How to extract values from hash? (Amazon API / Vacuum) 上展开——如何使这些新挖掘的值可用于我的视图?

目前获得

undefined method `image_url' for #<Hash:0x848402e0>

Extracted source (around line #5):
<%= link_to image_tag(product.image_url), product.url %> 

ma​​in_controller.rb

class MainController < ApplicationController
  def index
    request = Vacuum.new('GB')

    request.configure(
      aws_access_key_id: 'ABCDEFGHIJKLMNOPQRST',
      aws_secret_access_key: '<long messy key>',
      associate_tag: 'lipsum-20'
    )

    params = {
      'SearchIndex' => 'Books',
      'Keywords'=> 'Ruby on Rails',
      'ResponseGroup' => "ItemAttributes,Images"
    }

    raw_products = request.item_search(query: params)
    hashed_products = raw_products.to_h

    # puts hashed_products['ItemSearchResponse']['Items']['Item'].collect{ |i| i['ItemAttributes']['Title'] }
    # puts hashed_products['ItemSearchResponse']['Items']['Item'].collect{ |i| i['DetailPageURL'] }
    # puts hashed_products['ItemSearchResponse']['Items']['Item'].collect{ |i| i['LargeImage']['URL'] }

    @products = []

    @products = hashed_products['ItemSearchResponse']['Items']['Item'].each do |item|
      product = OpenStruct.new
      product.name = item['ItemAttributes']['Title']
      product.url = item['DetailPageURL']
      product.image_url = item['LargeImage']['URL']

      @products << product 
    end
  end
end

index.html.erb

<h1>Products from Amazon Product Advertising API</h1>
<% if @products.any? %>
  <% @products.each do |product| %>
    <div class="product">
      <%= link_to image_tag(product.image_url), product.url %>
      <%= link_to product.name, product.url %>
    </div>
  <% end %>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby hash amazon-web-services


    【解决方案1】:

    我不会将整个亚马逊哈希值变成OpenStruct。因为product.namenil,所以你无法找到它。

    相反,只需遍历亚马逊商品,将它们分配给您的产品,然后添加到 @products 数组:

    @products = []
    hashed_products['ItemSearchResponse']['Items']['Item'].each do |item|
      product = OpenStruct.new
      product.name = item['ItemAttributes']['Title']
      @products << product 
    end
    

    【讨论】:

    • 非常感谢您。看起来很新鲜。但我目前正在为#<0x848402e0>
    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 2017-08-11
    • 2014-05-08
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多