动态方法无法在应用程序中运行?

时间:2012-03-25 20:46:44

标签: ruby-on-rails ruby

我还处于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

1 个答案:

答案 0 :(得分:0)

好的,显然问题是SQLite。由于某种原因,它决定它将无法正常工作。 我切换到MySQL,现在一切正常。