我正在用 Rails 4 和 Devise 编写一个系统。我的目标是拥有一个用户基础模型,然后允许每个用户成为客户、卖家或两者兼而有之,这样卖家就不能使用客户电子邮件,但客户也可以成为卖家。
我有一个基本的用户模型,并且基于一个名为create_as的属性,我创建了依赖表。我暂时使用两个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
我现在的问题是,例如,客户端有一个由客户端模型中的after_create钩子自动生成的 PIN 码。
我想将此 PIN 号作为 Devise 发送的电子邮件的一部分发送以确认电子邮件地址,但我发现它是在调用 User after_create钩子 (create_client_or_seller) 之前发送的。
我考虑过使用 STI,但这可能不是最好的方法,因为每个“角色”都有不同的专业领域。
解决此问题的最佳方法是什么?