2012-06-17 2 views
0

Итак, я думаю, что я близок к тому, чтобы получить правильный синтаксис по методу ниже, но я не совсем такой. Я всегда путаюсь, когда использовать метод «я». Вот контекст: приведенный ниже метод предназначен для сравнения файла, сохраненного в базе данных, с файлом, находящимся на веб-сайте. Сам метод является членом модельного класса в приложении rails.Метод Ruby самостоятельно не установлен правильно

Но когда я запускаю код в консоли, он застревает на «я». Он не может вызвать метод версий в классе nil. Что я не понимаю о себе? Что мне нужно сделать, чтобы этот метод работал?

def compare 
     live_file = download_file 
     archive_file = self.versions.last.changeset[:robots_file] 
     if live_file != archive_file 
     return mismatch 
     end 
    end 

Редактировать: Вот сообщение об ошибке, которое я получаю в консоли.

NoMethodError: undefined method `versions' for nil:NilClass 
from /Users/bendowney/sites/WatchApp/app/models/site.rb:14:in `compare' 
from (irb):50 
from /Users/bendowney/.rvm/gems/[email protected]/gems/railties-3.2.5/lib/rails/commands/console.rb:47:in `start' 
from /Users/bendowney/.rvm/gems/[email protected]/gems/railties-3.2.5/lib/rails/commands/console.rb:8:in `start' 
from /Users/bendowney/.rvm/gems/[email protected]/gems/railties-3.2.5/lib/rails/commands.rb:41:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>' 

EDIT: Ответ ниже.

+2

Вы пытаетесь назвать это на текущий экземпляр этого класса, или вы пытаетесь назвать его статически, как в '' model_instance.compare' против YourModel.compare' –

+1

Я не думаю, что ваша проблема с «я»; Я думаю, что это связано с тем, как сам метод сравнения вызван. Можете ли вы показать нам пример настройки экземпляра содержащего класса и вызова метода? –

+0

Я вызываю метод, подобный этому model_instance.compare, например. "@ file.compare" –

ответ

0

Вы все задаете правильные вопросы. Они заставили меня задуматься. Я внес два изменения в свой оригинальный метод, и теперь он работает. Мне нужно было сохранить файл, который я загрузил (строка 2 ниже), и я забыл инкапсулировать статус «несоответствия» в кавычках. Спасибо за вашу помощь!

def compare 
    live_file = download_robots_file 
    self.save 
    archive_file = self.versions.last.changeset[:robots_file] 
    if live_file != archive_file 
    return "mismatch" 
    end 
end 
Смежные вопросы