Rails3中的UUID

Rob*_*son 7 ruby-on-rails

我正在尝试设置我的第一个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
Run Code Online (Sandbox Code Playgroud)

任何见解都会非常感激.

谢谢.

小智 5

如果出现错误"NoMethodError(UUID:Class的未定义方法`timestamp_create')",则将set_uuid方法的内容更改为:

self.uuid = UUIDTools::UUID.timestamp_create().to_s

我相信这对于更新版本的uuidtools gem来说是必要的.


Pre*_*ids 4

您是否在 Image 模型中声明了另一个 before_create 方法?如果是这样,您将覆盖 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
Run Code Online (Sandbox Code Playgroud)