#ruby-on-rails-4 #activerecord #rubygems
#ruby-on-rails-4 #activerecord #rubygems
Вопрос:
Я пытаюсь обновить rails 3.x до 4.2.x. И я пытаюсь заменить userstamp gem на activerecord-userstamp, чтобы сохранить идентификаторы создателя и программы обновления.
Я выполнил все шаги, предоставленные activerecord-userstamp gem в github, и правильно настроил gem
ActiveRecord::Userstamp.configure do |config|
# config.default_stamper = 'User'
# config.creator_attribute = :creator_id
# config.updater_attribute = :updater_id
config.deleter_attribute = nil
end
После того, как я сбросил базу данных и выполнил миграции
но все еще моя схема не обновилась до creator_id,updater_id
t.integer "created_by", limit: 4
t.integer "updated_by", limit: 4
В моей модели user.rb
class User < ActiveRecord::Base
model_stamper
end
в моих коллекциях.rb
class Collection < ActiveRecord::Base
stampable
end
Когда я пытаюсь сохранить creator_id и обновленный идентификатор, он не сохраняется в базе данных
| created_id | updated_id |
---- -------- ----------- -
| NULL | NULL |
Может ли кто-нибудь помочь с вашими решениями
Ответ №1:
Activerecord-userstamp не удалось загрузить MigrationHelper во время выполнения миграции. Я решил эту проблему, добавив помощник по миграции в свой репозиторий и используя этот вспомогательный метод в моем файле миграции.
помощник /activerecorduserstamp.rb
module activeRecorduserstamp
module ActiveRecord::Userstamp::MigrationHelper
extend ActiveSupport::Concern
def userstamps(*args)
config = ActiveRecord::Userstamp.config
column(config.creator_attribute, :integer, *args)
column(config.updater_attribute, :integer, *args)
column(config.deleter_attribute, :integer, *args) if config.deleter_attribute.present?
end
end
ActiveRecord::ConnectionAdapters::TableDefinition.class_eval do
include ActiveRecord::Userstamp::MigrationHelper
end
end
В моем файле миграции я включил этот вспомогательный метод как
db /migration/гггг.rd
include activeRecorduserstamp
class YYY < ActiveRecord::Migration
def change
change_table :YYY do |t|
t.userstamps
end
После добавления вспомогательного метода в мой файл миграции.Activerecord-Userstamp работает отлично.
Обратитесь к проблеме с github