Я работаю с жемчужиной UUIDTools в Rails 3 и сталкиваюсь с некоторыми проблемами. Это, кажется, работает нормально на практике:uuidtools, rspec и 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
Где моя справ? Кажется, что нет какого-либо шаблона для того, какой идентификатор назначен, я запустил это несколько раз и увидел, что он идет от нуля до тысячи.
Вот моя миграция:
Моя модель:
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
, я получаю то же поведение, что и в спецификациях, - отрубы отложены.
Хм, посмотрев на это, я обнаружил, что сами базы данных были разными. Я уронил таблицы и перепробовал миграцию, и все кажется прекрасным. Может быть, я оставил тестовую базу данных в странном состоянии, модифицируя мои миграции локально. – lobati
И еще странность. Некоторая комбинация миграции и создания баз данных, похоже, оставляет schema.rb в противоречивом состоянии. Я попытался удалить все таблицы, удалить schema.rb и начать с нуля, но я все еще не могу вернуться к работе. – lobati
Хорошо, это похоже на ошибку в рельсах. Раньше я использовал Rails 3.1.1 и играя вокруг меня обновил до Rails 3.1.3. Вот когда все закончилось в моем комментарии выше. Когда я вернусь к 3.1.1, это не сработает. – lobati