2015-05-18 2 views
0

У меня возникли проблемы с обработкой хэша, а затем с сохранением определенных частей в моей базе данных. Я могу пройти через нее, чтобы получить информацию, которая мне нужна. Моя проблема заключается в обновлении записи в моей базе данных. Я пытаюсь обновить существующую запись в моей базе данных на основе того, соответствует ли код страны для каждой страны код страны в анализе XML.Неопределенное обновление метода при обновлении записи в Rails

В моем контроллере у меня есть:

class CountriesController < ApplicationController 
    def index 
    @countries = Country.all 

    travel_alerts = request_data('http://travel.state.gov/_res/rss/TAs.xml') 
    travel_warnings = request_data('http://travel.state.gov/_res/rss/TWs.xml') 

    # Sets warnings 
    warnings_array = travel_warnings["rss"]["channel"]["item"] 
    warnings_array.each do |warning| 
     @country = Country.find_by(code: warning["identifier"].strip) 
     @country.update(title: warning["title"], 
         description: warning["description"]) 
    end 
    end 
end 

... 

Я попытался с помощью .update и .save, но ни работы. Когда я пытаюсь обновить, я получаю:

undefined method `update' for nil:NilClass 

Необходимо ли явно указывать метод обновления в модели страны? Если да, то как лучше всего получить доступ к анализируемой информации, так как это делается в контроллере?

+1

Это просто означает, что 'Country.find_by (код : warning ["identifier"]. strip) 'ничего не нашел, поэтому' @ country' будет Nil, а Nil не имеет метода обновления. Вы можете проверить, что '@ country' не является Nil, прежде чем пытаться обновить ex. 'if @ country.nil? @ country.update (и т. д.) ' – Clark

ответ

1

Это вызывает ошибку, поскольку Country по данному коду не найден, то find_by возвращает nil, на котором не существует способа обновления.

Вместо find_by executrun find_by! - вы должны получить ActiveRecord::RecordNotFound error

Если ожидается, некоторые страны не существуют поставить обновление заявление в случае блока

if @country 
    @country.update ... 
end 
+0

Отлично, спасибо! Прикрепление его к заявлению об обновлении (сбивало меня с ума, пытаясь понять это). Цените помощь! – hidace

Смежные вопросы