我正在使用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
端
答案 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
属性)。
我不知道为什么你的控制器会在你的模型中得到不同的值,但是你应该仔细观察并确保你在两种情况下都以相同的方式调用它。