Итак, я думаю, что я близок к тому, чтобы получить правильный синтаксис по методу ниже, но я не совсем такой. Я всегда путаюсь, когда использовать метод «я». Вот контекст: приведенный ниже метод предназначен для сравнения файла, сохраненного в базе данных, с файлом, находящимся на веб-сайте. Сам метод является членом модельного класса в приложении 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: Ответ ниже.
Вы пытаетесь назвать это на текущий экземпляр этого класса, или вы пытаетесь назвать его статически, как в '' model_instance.compare' против YourModel.compare' –
Я не думаю, что ваша проблема с «я»; Я думаю, что это связано с тем, как сам метод сравнения вызван. Можете ли вы показать нам пример настройки экземпляра содержащего класса и вызова метода? –
Я вызываю метод, подобный этому model_instance.compare, например. "@ file.compare" –