Я пытаюсь установить свой первый проект Rails3 и, вначале, я сталкиваюсь с проблемами с также uuidtools
, мой UUIDHelper
или возможно обратные вызовы. Я, очевидно, пытаюсь использовать UUID и (я думаю), я настроил вещи, как описано в статье Ariejan de Vroom. Я попытался использовать UUID в качестве первичного ключа и также как просто дополнительное поле, но он походит UUIDHelper
никогда не называется.
Я считал много упоминаний об обратных вызовах и/или помощниках, изменяющихся в Rails3, но я не могу найти специфические особенности, которые сказали бы мне, как корректироваться. Вот моя установка как есть в данный момент (было несколько повторений):
# migration
class CreateImages < ActiveRecord::Migration
def self.up
create_table :images do |t|
t.string :uuid, :limit => 36
t.string :title
t.text :description
t.timestamps
end
end
...
end
# lib/uuid_helper.rb
require 'rubygems'
require 'uuidtools'
module UUIDHelper
def before_create()
self.uuid = UUID.timestamp_create.to_s
end
end
# models/image.rb
class Image < ActiveRecord::Base
include UUIDHelper
...
end
Любое понимание очень ценилось бы.
Спасибо.
Вы объявляете еще один метод before_create в вашей модели Image? Если да, то вы переопределяете метод в модуле UUIDHelper. Вам нужно либо объявить обратный вызов другим способом, либо вызвать super в обратном вызове в модели изображения.
Редактирование: Возможно, измените помощник так:
module UUIDHelper
def self.included(base)
base.class_eval do
before_create :set_uuid
def set_uuid
self.uuid = UUID.timestamp_create.to_s
end
end
end
end
Если вы получаете сообщение об ошибке «NoMethodError (неопределенный метод` timestamp_create 'для UUID: Class) », измените содержимое метода set_uuid на:
self.uuid = UUIDTools :: UUID.timestamp_create (). To_s
Я считаю, что это необходимо для более поздних версий гема uuidtools.
Я также заметил, что вам не хватает : id => false
в вашей create_table
. Ознакомьтесь с примером из статьи Ариджана более внимательно:
create_table :posts, :id => false do |t|
t.string :uuid, :limit => 36, :primary => true
end
Кроме того, я предпочитаю UUIDTools :: UUID.random_create.to_s
версии с отметкой времени. YMMV.