Я все еще на стадии изучения Ruby и RoR, но я уже столкнулся с проблемой.Я создал скаффолд «Пользователи» с полями «имя» и «пароль».Позже я также добавил дополнительные поля, такие как «pin» и «salt».
Теперь, хотя User.find_by_name и find_by_password работают отлично, по некоторым причинам find_by_pin, похоже, не работает.Я попытался немного погуглить, но ничего не нашел.
Я также попробовал тот же метод в консоли ruby (консоль rails) и по какой-то причине он там работает отлично - он возвращает правильные данныекак и ожидалось.
Есть идеи?
РЕДАКТИРОВАТЬ 1:
Как кто-то заявил в комментариях, скажем, я используюэтот код: (да, cookie [: pin] установлен)
def get_user
user = User.find_by_pin(cookies[:pin])
if user.pin == cookies[:pin]
'yes'
end
end
и позже я делаю это:
<%= get_user %>
возвращает это:
undefined method `pin' for nil:NilClass
РЕДАКТИРОВАТЬ 2:
Я попробовал это:
def get_user
user = User.find_by_name('Crembo')
user.pin # returns 753e345a113471a6775e242f444704fe
user = User.find_by_pin(user.pin)
if user.nil?
'is nil'
else
'exists'
end
end
, и он возвращает 'is nil'.Как это имеет смысл?
Чтобы расширить это,
def pin_check
user = User.find_by_name('Crembo')
if user.pin == cookies[:pin]
'true'
else
'false'
end
end
возвращает true.
EDIT 3:
Asспросил в комментариях мою модель пользователя:
class User < ActiveRecord::Base
has_many :posts
validates_uniqueness_of :name
def password_matches?(password_to_match)
self.password == Digest::SHA512.hexdigest(password_to_match)
end
end