2009-11-24 192 views
0

我使用Ruby的AWS寶石與亞馬遜進行交互。我在我的控制器中測試了它,並且它工作正常,但是當我將代碼移到我的模型中時,它不能正確解析來自亞馬遜的數據。紅寶石AWS - 亞馬遜

舉例來說,在我的控制器

@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 

回答

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

我不完全知道爲什麼你的控制器獲取文本版本,型號代碼ISN」 t,但這可能與結果在最終結果中的使用方式有關。如果你顯示的結果在您的視圖,該視圖代碼被隱式調用的結果to_s - <%= whatever %>實際上意味着<%= whatever.to_s %>

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屬性)。

我不知道爲什麼你在你的控制器得到一個不同的值,當時在模型中,但你應該仔細觀察,並確保你實際上調用它在這兩種情況下相同的方式。