Как сопоставить API продуктов Amazon с Rails?
Я пытаюсь получить продукты из API продуктов Amazon (используя https://github.com/hakanensari/vacuum/) и отобразить их в моем приложении Rails. Но как мне добавить названия продуктов и фотографии в мои просмотры?
В данный момент получаю:
ActionView::Template::Error (undefined method `image' for #<Array:0x88486aec>):
2: <% if @products.any? %>
3: <% @products.each do |product| %>
4: <div class="product">
5: <%= link_to image_tag(product.image.url), product.url %>
6: <%= link_to product.name, product.url %>
7: </div>
8: <% end %>
main_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'
}
#
# NOT SURE WHERE TO TAKE IT FROM HERE
#
raw_products = request.item_search(query: params)
@products = raw_products.to_h
product = OpenStruct.new(@products)
end
end
index.html.erb:
<% 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 %>
1 ответ
Решение
Вы получаете ошибку, потому что raw_products
не массив По номиналу vacuum
документация, вам придется преобразовать его в хеш raw_products.to_h
или Вы также можете передать тело ответа в свой собственный синтаксический анализатор для некоторых нестандартных XML-операций:
MyParser.new(raw_products.body)
Поэтому вы должны сначала правильно проанализировать ответ, прежде чем его использовать.
Вы можете просто сделать следующее:
@products = raw_products.to_h
product = OpenStruct.new(@products)