UUID в Rails3

Я пытаюсь установить свой первый проект 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

Любое понимание очень ценилось бы.

Спасибо.

7
задан Rob Wilkerson 21 March 2010 в 16:45
поделиться

3 ответа

Вы объявляете еще один метод 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
4
ответ дан 6 December 2019 в 21:12
поделиться

Если вы получаете сообщение об ошибке «NoMethodError (неопределенный метод` timestamp_create 'для UUID: Class) », измените содержимое метода set_uuid на:

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

Я считаю, что это необходимо для более поздних версий гема uuidtools.

5
ответ дан 6 December 2019 в 21:12
поделиться

Я также заметил, что вам не хватает : 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.

1
ответ дан 6 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: