Динамические методы не будут работать в приложении? - PullRequest
0 голосов
/ 26 марта 2012

Я все еще на стадии изучения 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

1 Ответ

0 голосов
/ 31 марта 2012

Ок, видимо проблема была в SQLite. Почему-то решили, что он не будет работать должным образом. Я перешел на MySQL, и теперь все работает отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...