【问题标题】:Using a method while looping through an array in ruby在ruby中循环遍历数组时使用方法
【发布时间】:2010-11-14 20:13:26
【问题描述】:

我正在使用 ruby​​-aaws 退回亚马逊产品,我想将它们输入到我的数据库中。我创建了一个模型 Amazonproduct 并创建了一个方法 get_amazon_data 来返回一个包含所有产品信息的数组。当我在数组中定义特定元素(例如 to_a[0] )然后使用 ruby​​-aaws item_attributes 方法时,它会返回我正在搜索的名称并将其保存到我的数据库中。我正在尝试遍历数组并且仍然让 item_attributes 方法工作。当我没有定义元素时,我收到此错误:#Array:0x7f012cae2d68 的未定义方法 `item_attributes'

这是我的控制器中的代码。

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
 }

编辑:在我的模型中编写代码以查看是否有帮助:

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

感谢任何帮助/建议。

【问题讨论】:

  • 请查看编辑后的回复。

标签: ruby-on-rails


【解决方案1】:

我不熟悉 Amazon API,但我确实注意到 @arr 是一个数组。数组通常没有像item_attributes 这样的方法,因此您可能在编码过程中的某个地方忘记了哪个对象是哪个对象。它发生了;)

尝试将 .item_attributes 调用移到支持该方法的对象上。也许amazonproduct.get_amazon_data(:r),在变成to_a的数组之前,有那个方法吗?

【讨论】:

  • 我在控制台中尝试过,但我认为方法 .itemattributes 仅适用于数组中的特定元素。例如,Amazonproducts.get_amazon_data( :r ).to_a[0].item_attributes.title.to_s 将返回数组中第一个元素的标题。谢谢!
【解决方案2】:

我不太清楚你的课程在做什么,但要使用#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]
....

编辑

试试

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

【讨论】:

  • 嗯,我添加了我的模型代码,看看是否有帮助。我不明白如何在这里使用哈希。我遇到的麻烦是对数组中的元素使用方法,而不是对数组本身。此方法:.item_attributes.title.to_s 需要作用于数组中的特定记录(如 [0] 或 [1] 等),并且不会作用于数组本身。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 2018-06-29
  • 2012-10-12
  • 2019-08-13
  • 2013-11-23
相关资源
最近更新 更多