Ruby AWS - 亚马逊

时间:2009-11-24 18:26:54

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

我正在使用Ruby-AWS gem与Amazon进行交互。我在我的控制器中测试它并且工作正常,但是当我将代码移动到我的模型中时,它无法正确地从亚马逊解析数据。

例如,在我的控制器中

@items[0].medium_image.url = "http://ecx.images-amazon.com/images/I/61YIGdgh86L._SL160_.jpg"

但在我的模特中

items[0].medium_umage.url = '[#<Amazon::AWS::AWSObject::URL:0x1030ba758 value="http://ecx.images-amazon.com/images/I/61YIGdgh86L._SL160_.jpg">]'

请帮忙!

在这两种情况下,我的代码是:

  def add_amazon_links
require 'amazon/aws'
require 'amazon/aws/search'

query = self.name
#!/usr/bin/ruby -w
#
# $Id: item_search1,v 1.4 2008/04/11 19:24:24 ianmacd Exp $

is = ItemSearch.new( 'All', { 'Keywords' => '#{query}' })
rg = ResponseGroup.new( 'Medium', 'Reviews')

req = Request.new
req.locale = 'us'

resp = req.search( is, rg )

items = resp.item_search_response[0].items[0].item
@items = resp.item_search_response[0].items[0].item

unless @items[0].blank?
  self.image_url = @items[0].medium_image.url
  self.a_price = @items[0].item_attributes[0].list_price[0].formatted_price
  self.title = @items[0].item_attributes[0].title
  self.a_url = @items[0].detail_page_url
  self.save!
end

2 个答案:

答案 0 :(得分:1)

AWS模块将响应作为对象详细说明相关结果项。

我在这些对象上调用.to_s方法来获取文本表示。正如乔丹在上面提到的那样,你可能也需要得到数组的第一个元素,所以它是@items[0].medium_image[0].url.to_s,尽管我怀疑你只需要@items[0].medium_image.url.to_s

我没有专门处理这些图片,但我的代码(可行)代码是:item.detail_page_url.to_s

我不完全确定你的控制器为何获得文本版本,而模型代码不是,但这可能与结果在最终结果中的使用方式有关。如果您在视图中显示结果,则视图代码会隐式调用结果上的to_s - <%= whatever %>实际上意味着<%= whatever.to_s %>

答案 1 :(得分:0)

我没有使用过AWS,但在第二种情况下,它会返回一个包含一个元素Amazon::AWS::AWSObject::URL对象的数组。也就是说,以下字符串:

[#<Amazon::AWS::AWSObject::URL:0x1030ba758 value="http://ecx.images-amazon.com/images/I/61YIGdgh86L._SL160_.jpg">]

...如果items[0].medium_image.url是一个带有AWSObject::URL对象的数组,我希望得到它,我试图将整个事物转换为字符串。要获取实际的URL字符串,我将调用items[0].medium_image.url[0].value(数组的第一个元素的value属性)。

我不知道为什么你的控制器会在你的模型中得到不同的值,但是你应该仔细观察并确保你在两种情况下都以相同的方式调用它。

相关问题