【问题标题】:Ruby AWS - AmazonRuby AWS - 亚马逊
【发布时间】:2009-11-24 18:26:53
【问题描述】:

我正在使用 Ruby-AWS gem 与 A​​mazon 进行交互。我在我的控制器中对其进行了测试,它运行良好,但是当我将代码移到我的模型中时,它没有正确解析从亚马逊返回的数据。

例如,在我的控制器中

@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

结束

【问题讨论】:

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


    【解决方案1】:

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

    我在这些对象上调用.to_s 方法来获取文本表示。正如 Jordan 上面提到的,您可能还需要获取数组的第一个元素,因此应该是 @items[0].medium_image[0].url.to_s,尽管我怀疑您只需要 @items[0].medium_image.url.to_s

    我没有专门处理图像,但我的代码(有效)是这样做的:item.detail_page_url.to_s

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

    【讨论】:

      【解决方案2】:

      我没有使用过 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 属性)。

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

      【讨论】:

        猜你喜欢
        • 2013-12-23
        • 1970-01-01
        • 2014-04-20
        • 2015-01-23
        • 1970-01-01
        • 1970-01-01
        • 2017-03-08
        • 2014-04-29
        • 1970-01-01
        相关资源
        最近更新 更多