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에서 나는 다음을 가지고있다 :

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 =>'[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을 참조하십시오.

관련 SO question 감사합니다.

+0

이것은 갈 길이지만, 모든 cretate/update에서 호출 될 것입니다. 생성시에만 필요합니다. – EastsideDeveloper

+1

before_create 콜백 권한을 사용할 수 있습니까? –