1

Rails 4 と Devise でシステムを書いています。私の目標は、1 つのユーザー ベース モデルを用意し、各ユーザーをクライアント、売り手、またはその両方にできるようにすることです。この方法では、クライアントの電子メールを売り手が使用することはできませんが、クライアントは売り手になることもできます。

基本的な User モデルがあり、 create_asという属性に基づいて従属テーブルを作成します。当分の間、2 つのhas_oneリレーションを使用してこれを設定します。

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable

  has_one :seller, dependent: :destroy
  has_one :client, dependent: :destroy

  after_create :create_client_or_seller

  attr_accessor :phone_number
  attr_accessor :create_as

  protected

  def create_client_or_seller
    if create_as == 'client'
      self.client = Client.create(phone_number: phone_number)
    elsif create_as == 'seller'
      self.seller = Seller.create
    end
  end
end

私の問題は、たとえば、Client モデルのafter_createフックによって自動的に生成される PIN 番号が Client にあることです。

この暗証番号をDeviseがメールアドレス確認のために送信するメールの一部として送信したかったのですが、ユーザーのafter_createフック(create_client_or_seller)が呼び出される前に送信されていることがわかりました。

STIを利用することも考えましたが、「役割」ごとに専門分野が異なるため、最善のアプローチではないかもしれません。

この問題を解決する最善の方法は何ですか?

4

1 に答える 1