Получение недопустимого исключения Nil Object при создании RSS-канала в Rails - PullRequest
0 голосов
/ 20 июня 2010

Я создаю RSS-канал для уведомлений пользователей, у каждого пользователя есть уникальный канал, который они получают с уникального URL. Проблема в том, что @notifications (установленное в контроллере) дает объект, который считается nil, но @notifications и существует, и содержит данные.

Вот код контроллера:

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

и это 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

конец

При обращении к URL с правильным api_key, я получаю эту ошибку:

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

Указанный api_key является правильным, как показано под параметрами на экране «Обнаружено исключение»:

Parameters:

{"api_key"=>"AAEE5663HHH"}

При запуске команд через консоль все работает как положено (например, когда я запускаю почти идентичный код для отображения уведомлений через обычную веб-страницу), поэтому я подозреваю, что @notifications неправильно передается в файл RXML, хотя я не могу понять, почему нет.

Ключ пользователя и API определенно совпадают, и для пользователя есть определенные уведомления.

Это первый RSS, который я сделал после следующего примера: http://paulsturgess.co.uk/articles/show/13-creating-an-rss-feed-in-ruby-on-rails

Любая помощь по этому вопросу будет принята с благодарностью!

1 Ответ

1 голос
/ 21 июня 2010

Ваша проблема в том, что вы вызываете рендер в верхней части действия вашего контроллера, прежде чем будет запущен какой-либо из шагов!

...