Я работаю с гемом UUIDTools в Rails 3 и сталкиваюсь с некоторыми проблемами.Кажется, на практике это работает нормально:
> item = Item.create
=> #<Item uuid: "e9d00043-9200-4497-a55c-509c5de3dd88", created_at: "2012-01-09 01:56:49", updated_at: "2012-01-09 01:56:49">
> item.id
=> "e9d00043-9200-4497-a55c-509c5de3dd88"
Но тогда в моих спецификациях рассказывается другая история:
require 'spec_helper'
describe Item do
it 'should assign an id' do
item = Item.create
puts "item id: #{item.id}"
end
end
Запуск этой спецификации показывает:
item id: 5
.
Finished in 2.21 seconds
1 example, 0 failures
Где мой гид?Кажется, нет никакого шаблона для того, что назначено идентификатору, я выполнил это несколько раз и видел, что он идет от 0 до тысяч.
Вот моя миграция:
class CreateItems < ActiveRecord::Migration
def change
create_table :items, :id => false do |t|
t.string :uuid, :null => false, :primary => true
t.timestamps
end
add_index :items, :uuid, :unique => true
end
end
Моя модель:
require 'uuid_helper'
class Item < ActiveRecord::Base
include UUIDHelper
end
И мой uuid_helper:
module UUIDHelper
def self.included(base)
base.class_eval do
set_primary_key :uuid
attr_readonly :uuid
before_create :set_uuid
private
def set_uuid
self.uuid = UUIDTools::UUID.random_create.to_s
end
end
end
end
Использование некоторой логики отладчика в set_uuid
Я обнаружил, что она выполняет to_i
на uuid в какой-то момент.Есть предложения?
Обновление Это похоже на ошибку в тестовой среде Rails.Когда я запускаю RAILS_ENV=test rails console
, я получаю то же поведение, что и в спецификациях - направляющие отрезаются.