2010-06-20 4 views
0

Je crée un flux RSS pour les notifications des utilisateurs. Chaque utilisateur dispose d'un flux qui leur est propre et qui provient d'une URL unique. Le problème est que @notifications (défini dans le contrôleur) donne un objet nul, mais @notifications existe et contient des données.Obtention d'une exception d'objet Nil lors de la création d'un flux RSS dans Rails

Voici le code du contrôleur:

def user_notifications 
    render :layout => false 
    @user = User.find_by_api_key(params[:api_key], :limit => 1) 
    @notifications = UserNotification.find_all_by_user_id(@user.id, :order => 'id DESC', :limit => 40) 
    response.headers["Content-Type"] = "application/xml; charset=utf-8" 
end 

et c'est le fichier RXML:

xml.instruct! 

xml.rss "version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/" do 
xml.channel do 

xml.title  "MySite.com Notifications" 
xml.description "The latest goings on at your MySite.com" 

@notifications.each do |notification| 
xml.item do 
    xml.title  notification.message.gsub(/<\/?[^>]*>/, "") 
    xml.link  "http://www.MySite.com"+notification.url 
    xml.description notification.message 
    xml.guid  "http://www.MySite.com"+notification.url 
end 
end 

end 

fin

Lorsque vous accédez à l'URL avec le api_key correct, je reçois cette erreur:

You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.each 

Extracted source (around line #9): 

6: xml.title  "MySite.com Notifications" 
7: xml.description "The latest goings on at your MySite.com" 
8: 
9: @notifications.each do |notification| 
10:  xml.item do 
11:  xml.title  notification.message.gsub(/<\/?[^>]*>/, "") 
12:  xml.link  "http://www.MySite.com"+notification.url 

Le api_key donné est correct, comme indiqué dans les paramètres de l'exception écran pris:

Parameters: 

{"api_key"=>"AAEE5663HHH"} 

Lors de l'exécution des commandes par la tout console fonctionne comme prévu (comme lorsque je cours près de code identique pour afficher les notifications via un page web normale) donc je suspecte que @notifications n'est pas passé correctement dans le fichier RXML, bien que je ne puisse pas savoir pourquoi.

La clé User et l'API correspondent parfaitement, et il y a définitivement des notifications pour l'utilisateur.

Ceci est le premier RSS je l'ai fait après avoir suivi l'exemple ici: http://paulsturgess.co.uk/articles/show/13-creating-an-rss-feed-in-ruby-on-rails

Toute aide sur ce serait très apprécié!

Répondre

1

Votre problème est que vous appelez render en haut de l'action de votre contrôleur, avant que l'une des étapes ne soit lancée!

+0

Merci pour ça! Je ne peux pas croire que j'ai manqué ça – SaucyK