2012-01-09 77 views
0

我正在使用Rails 3中的UUIDTools gem并遇到一些问题。这似乎在实践中很好地工作: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 

哪里是我的GUID?似乎没有任何模式分配的ID,我已经运行了很多次,并且看到它从0到上千以内的任何地方。

这里是我的移民:

我的模型:

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时,我得到了与规格中相同的行为 - 指令被切断。

+0

嗯,看着这一些,我发现数据库本身是不同的。我放弃了桌子,重新进行了迁移,一切似乎都很顺利。可能是我离开我的测试数据库在奇怪的状态修改我的本地迁移。 – lobati 2012-01-09 03:41:31

+0

更怪异。迁移和创建数据库的某些组合似乎会使schema.rb处于不一致的状态。我试过删除所有的表,删除schema.rb并从头开始,但我仍然无法恢复工作。 – lobati 2012-01-09 04:16:45

+0

好吧,它好像是一个轨道中的错误。我在使用Rails 3.1.1之前和在玩游戏时升级到了Rails 3.1.3。那是在我上面的评论中解决问题的时候。当我恢复到3.1.1时,它不起作用。 – lobati 2012-01-09 04:49:54

回答

0

好的,答案是从3.1.1升级到Rails 3.1.3。