我还处于Ruby和RoR的学习阶段,但我已经遇到了问题。 我创建了一个名为Users的脚手架,其中包含“name”和“password”字段。 后来,我还添加了更多字段,如“pin”和“salt”。
现在,虽然User.find_by_name和find_by_password工作得很好,但出于某种原因,find_by_pin似乎不起作用。我尝试了谷歌搜索但没有发现任何东西。
我也在ruby控制台(rails控制台)中尝试了相同的方法,出于某种原因,它在那里工作得很好 - 它会按预期返回正确的数据。
有什么想法吗?
编辑1:
正如有人在评论中所说,假设我正在使用此代码:(是的,cookies [: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
并返回'是nil'。这有什么意义呢?
要扩展它,
def pin_check
user = User.find_by_name('Crembo')
if user.pin == cookies[:pin]
'true'
else
'false'
end
end
返回true。
编辑3:
正如评论中所述,我的用户模型:
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
答案 0 :(得分:0)
好的,显然问题是SQLite。由于某种原因,它决定它将无法正常工作。 我切换到MySQL,现在一切正常。