Я не эксперт по Ruby, поэтому я не уверен, нахмурился он или нет, но на вашем месте я бы забил его в файл в lib / и ударил прямо на ActiveRecord :: Base с class_eval.
ActiveRecord::Base.class_eval do
def assign_uuid
if self.uuid.nil?
self.uuid = ActiveSupport::SecureRandom.hex(32)
end
end
end
Таким образом, он доступен для всех ваших моделей. Либо так, либо создайте файл вспомогательных материалов для разных моделей и включите модуль в модели, которые вам нужны.
# lib/misc_model_helpers.rb
module MiscModelHelpers
def assign_uuid
if self.uuid.nil?
self.uuid = ActiveSupport::SecureRandom.hex(32)
end
end
end
# models/person.rb
class Person < ActiveRecord::Base
include MiscModelHelpers
before_save :assign_uuid
end
Опять же, я не на 100% уверен в самом рубиновом способе сделать это. Это, наверное, что-то совершенно другое. Это всего лишь два способа, которые работают для меня!