2009-11-24 4 views
0

J'utilise la gemme Ruby-AWS pour interagir avec Amazon. Je le testais dans mon contrôleur et cela fonctionnait bien, mais quand j'ai déplacé le code dans mon modèle, il n'est pas correctement analysé les données d'Amazon.Ruby AWS - Amazon

Par exemple, dans mon contrôleur

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

Mais dans mon modèle

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

S'il vous plaît aider!

Dans les deux cas, mon code est:

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 

fin

Répondre

1

Le module AWS renvoie des réponses en tant qu'objets qui détaillent les éléments de résultat pertinents.

J'appelle la méthode .to_s sur ces objets pour obtenir la représentation textuelle. Comme Jordan mentionné ci-dessus, vous devrez peut-être obtenir le premier élément du tableau aussi, donc ce serait @items[0].medium_image[0].url.to_s, bien que je soupçonne que vous auriez juste besoin de @items[0].medium_image.url.to_s.

Je n'ai pas travaillé spécifiquement avec les images, mais mon code (qui fonctionne) Est-ce: item.detail_page_url.to_s

Je ne suis pas tout à fait sûr pourquoi votre contrôleur devient la version texte et le code du modèle ISN » t, mais c'est probablement lié à la façon dont le résultat est utilisé dans le résultat final. Si vous affichez le résultat dans votre vue, le code de la vue appelle implicitement to_s sur le résultat - <%= whatever %> signifie effectivement <%= whatever.to_s %>

0

Je ne l'ai pas utilisé AWS, mais il semble que dans le second cas, il est retourne un tableau avec un élément, un objet Amazon::AWS::AWSObject::URL . Autrement dit, la chaîne suivante:

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

... est ce que je vous attendre à obtenir si items[0].medium_image.url était un tableau avec un objet dans AWSObject::URL et j'ai essayé de convertir le tout à une chaîne. Pour obtenir la chaîne d'URL réelle, j'appellerais items[0].medium_image.url[0].value (l'attribut value du premier élément du tableau). Je ne sais pas pourquoi vous récupérez une valeur différente dans votre contrôleur, mais dans votre modèle, mais vous devriez regarder de plus près et vous assurer que vous l'appelez vraiment de la même manière dans les deux cas.

Questions connexes