Использование метода во время цикла по массиву в ruby - PullRequest
0 голосов
/ 14 ноября 2010

Я использую ruby-aaws для возврата продуктов Amazon и хочу ввести их в свою БД.Я создал модель Amazonproduct и создал метод get_amazon_data для возврата массива со всей информацией о продукте.Когда я определяю конкретный элемент в массиве (например, to_a [0]), а затем использую метод ruby-aaws item_attributes, он возвращает имя, которое я ищу, и сохраняет его в моей БД.Я пытаюсь перебрать массив и по-прежнему работать метод item_attributes.Когда я не определяю элемент, я получаю эту ошибку: неопределенный метод `item_attributes 'для #Array: 0x7f012cae2d68

Вот код в моем контроллере.

def create
@arr = Amazonproduct.get_amazon_data( :r ).to_a
 @arr.each { |name|
   @amazonproduct = Amazonproduct.new(params[:amazonproducts])
   @amazonproduct.name = @arr.item_attributes.title.to_s
 }

EDIT: Codeв моей модели, чтобы увидеть, если это помогает:

class Amazonproduct < ActiveRecord::Base

  def self.get_amazon_data(r)
   resp = Amazon::AWS.item_search('GourmetFood', { 'Keywords' => 'Coffee Maker' })
   items = resp.item_search_response.items.item
   end
end

Спасибо за любую помощь / совет.

Ответы [ 2 ]

1 голос
/ 14 ноября 2010

Я не знаком с API Amazon, но замечаю, что @arr - это массив. Массивы обычно не имеют методов типа item_attributes, так что вы, вероятно, потеряли отслеживание того, какой объект был где-то в процессе кодирования. Бывает;)

Попробуйте переместить этот вызов .item_attributes на объект, который поддерживает этот метод. Может быть, amazonproduct.get_amazon_data(:r), перед тем как превратиться в массив с to_a, имеет этот метод?

0 голосов
/ 15 ноября 2010

Мне не совсем понятно, что делают ваши классы, но для использования #each вы можете сделать что-то вроде

hash = {}

[['name', 'Macbook'], ['price', 1000]].each do |sub_array|
  hash[sub_array[0]] = sub_array[1]
end

, который дает вам хеш, как

{ 'name' => 'Macbook', 'price' => 1000 }

С этим хешем проще работать

@product = Product.new
@product.name = hash[:name]
....

EDIT

Попробуйте

def create
  @arr = Amazonproduct.get_amazon_data( :r ).to_a
  @arr.each do |aws_object|
    @amazonproduct = Amazonproduct.new(params[:amazonproducts])
    @amazonproduct.name = aws_object.item_attributes.title.to_s
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...