Datamapper Callback для форума код поездки - PullRequest
1 голос
/ 03 декабря 2010

Контекст: создание реализации трипода (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 по умолчанию) и запускать его только при наличии пароля, поэтому я делаю это.

Но сейчас это не работает,Я достаточно ударился головой об этом и перешел к другим проблемам и вернулся к нему, если смогу получить какой-то вклад.Я работаю с рельсами, поэтому я добавил этот тег, хотя в основном это не проблема с рельсами.

1 Ответ

0 голосов
/ 03 декабря 2010

Не стесняйтесь просматривать или вносить вклад или использовать для ошибок здесь.

https://github.com/blueblank/Shout/tree/oneshout

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