Контекст: создание реализации трипода (http://en.wikipedia.org/wiki/Tripcode) для форума. По существу, слабый хеш для безрегистрационной идентификации.
Существует одна модель, 'Post'. Сообщения располагаются в родительском / дочернем формате, новое сообщение создает родительское, ответы создают дочернее к родительскому. Есть одна форма, сейчас есть поле, которое отправляет сообщения в контроллер / модель, содержит поле содержимого и пароля.
require 'bcrypt'
class Shout
include DataMapper::Resource
include BCrypt
property :id, Serial # unique key
property :content, Text
property :password_hash, String
property :trip, String # trip for display
belongs_to :forum
is :tree, :order => [:created_at]
attr_accessor :password
#before :save do
def password
@password ||= Password.new(password_hash)
end
def password=(new_password)
@password = Password.create(new_password)
self.password_hash = @password
end
def trip
@trip = '!'<<self.password_hash.to_str[20..33]
self.trip = @trip
end
#end
end
DataMapper.finalize
Основной потокэто - пост / ответ, если в поле пароля есть пароль, возьмите его и запустите через bcrypt, сохраните полученный результат как password_hash для последующего сравнения, создайте код отключения для отображения. Но я получаю ошибки, которые бьют меня по головепротив
Основная ошибка, которую я получаю, это
неопределенный метод `примитив? 'для nil: NilClass
, по-видимому, исходящий из
lib / active_support /whiny_nil.rb: 48: в `method_missing '
Я не знаю, как с этим справиться или обойтись. Я не делаю что-то или проверяю что-то с помощью cтроллер, но пока не знаю что.Другая ошибка, которую я получаю, связана с недопустимым хешем bcrypt, но я не могу немедленно скопировать это.
Методы перехвата находятся прямо на странице bcrypt-ruby.
Создание поля BCryptHash работает (dm-types), но увеличивает время обработки формы в 10 раз на сервере локального хоста и делает это для каждого поста, поэтому мне нужен способ настройкистоимость хеша bcrypt (например, 1 вместо 10 по умолчанию) и запускать его только при наличии пароля, поэтому я делаю это.
Но сейчас это не работает,Я достаточно ударился головой об этом и перешел к другим проблемам и вернулся к нему, если смогу получить какой-то вклад.Я работаю с рельсами, поэтому я добавил этот тег, хотя в основном это не проблема с рельсами.