2017-10-24 12 views
0
Rails 5.1 
Devise 
Devise Invitable 

とレールのデフォルトのIDを交換、私が持っている:私のcreate_usres移行ファイルでカスタムIDモデル/懸念/ 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 

を、私が持っている:

class DeviseCreateUsers < ActiveRecord::Migration[5.1] 
    def change 
    create_table :users, id: false do |t| 
     t.column :id, :primary_string 

私のモデル/ user.rbでは、私が持っている:私のseeds.rbファイル、I Hで

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 

をAVE:私はすべての考案モデルエクスポートした

user = User.new(
    :email =>'[email protected]', 
    :password =>'xK#986754', 
    :password_confirmation =>'xK#986754', 
    :first_name =>'John', 
    :last_name =>'Doe', 
    :role => 1, 
    :approved => true 
) 
user.skip_invitation 
user.save   

(確認、招待状、パスワード、登録、セッションは、ロックを解除)、およびコントローラ/ユーザフォルダの下に、対応するコントローラを置きます。

generate_model_idメソッドをどのコントローラから呼び出すのですか?

答えて

1

アクティブなレコードコールバックを使用して、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 

詳細については、アクティブなサポートコールバックhereを参照してください。

関連するquestionありがとうございました。

+0

これは行く方法の1つではありますが、それは作成時に必要なときにすべてのcretate/updateで呼び出されることを意味します – EastsideDeveloper

+1

この場合、before_createコールバック権限を使用できますか? –

関連する問題