Rails 5.1
Devise
Devise Invitable
在models/concern/shared.rb中,我有:
module Shared
extend ActiveSupport::Concern
def generate_model_id
self.id = "#{self.class.name}.#{Time.now.to_f.to_s}" if id.blank?
end
在我的create_usres迁移文件中,我有:
class DeviseCreateUsers < ActiveRecord::Migration[5.1]
def change
create_table :users, id: false do |t|
t.column :id, :primary_string
在我的模型/user.rb 中,我有:
class User < ActiveRecord::Base
include Shared
enum role: [:user, :vip, :admin]
after_initialize :set_default_role, :if => :new_record?
devise :invitable, :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
在我的seeds.rb文件中,我有:
user = User.new(
:email =>'myemail@mydomain.com',
:password =>'xK#986754',
:password_confirmation =>'xK#986754',
:first_name =>'John',
:last_name =>'Doe',
:role => 1,
:approved => true
)
user.skip_invitation
user.save
我已经导出了所有 Devise 模型(确认、邀请、密码、注册、会话、解锁),并将相应的控制器放在控制器/用户文件夹下。
我从哪个控制器调用 generate_model_id 方法,以及在哪里调用?
我希望您可以在使用活动记录回调创建的模块 - shared.rb 中执行此操作。
module Shared
extend ActiveSupport::Concern
included do
before_save :generate_model_id
end
def generate_model_id
self.id = "#{self.class.name}.#{Time.now.to_f.to_s}" if id.blank?
end
end
在此处阅读有关主动支持回调的更多信息。
相关 SO 问题谢谢。