Я бегу по учебнику Lynda Rails 3 . В какой-то момент в контроллере с именем access_controller мы вызываем метод из модели с именем AdminUser. Исходный звонок был:
authorized_user = AdminUser.authenticate(params[:username], params[:password])
Когда я запускаю rails server, открываю браузер и получаю доступ к соответствующему представлению, я получаю сообщение об ошибке: TypeError, невозможно преобразовать строку в целое число
Этот же вопрос задавался дважды до . В первый раз спрашивающий говорит, что проблема решилась на следующий день. (Я впервые столкнулся с этим 3 дня назад, так что этого не произошло.) На второй вопрос не было ответа. Я постараюсь предоставить гораздо более подробную информацию:
Метод в модели был:
def self.authenticate(username="", password="")
user = AdminUser.find_by_username(username)
if user && user.password_match?(password)
return user
else
return false
end
end
Когда я вызываю этот метод из консоли rails, он работает совершенно нормально. Кажется, что-то не так в вызове с контроллера или попытке получить доступ через браузер (я относительный новичок, поэтому я извиняюсь, что не могу выразить эту мысль лучше). С тех пор я повторил эту ошибку с более простым методом в той же модели AdminUser:
def self.nothing
true
end
Это все равно дает мне ту же ошибку. Затем я попытался вызвать метод self.nothing из другого контроллера и действия (называемого pages_controller # show). Когда я попытался открыть это в браузере, я снова получил ту же ошибку: «не могу преобразовать строку в целое число»
Затем я создал идентичный метод self.nothing в моей предметной модели. Когда я пытаюсь запустить этот метод из действия show в pages_controller, он работает совершенно нормально. Нет ошибок.
Итак, тот же метод работает совершенно нормально в консоли rails, совершенно нормально, когда я помещаю его в мою модель Subject, но выдает ошибку, когда я помещаю его в мою модель AdminUser.
Затем я попытался закомментировать практически все, что видно в моей модели AdminUser, чтобы посмотреть, смогу ли я устранить ошибку. Я наконец смог. Ошибка, по-видимому, была вызвана другим методом:
def self.hash(password="")
Digest::SHA1.hexdigest(password)
end
Я должен был удалить этот метод несколько видео уроков назад, когда мы добавили эти другие методы:
def self.make_salt(username="")
Digest::SHA1.hexdigest("Use #{username} with #{Time.now} to make salt")
end
def self.hash_with_salt(password="", salt="")
Digest::SHA1.hexdigest("Put #{salt} on the #{password}")
end
Я никогда не удалял исходный, но по какой-то причине именно он стал причиной ошибки.
Итак, мой вопрос сейчас: почему выход из этого метода (который нигде не использовался) приводил к ошибке «невозможно преобразовать строку в целое число»?