我的业务逻辑如下:我有很多用户。每个用户可以是请求者或工作者。
这就是我在 Rails 中实现它的方式。我正在使用设计进行身份验证。
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :confirmed_at
has_one :requester
end
这是请求者模型。
class Requester < ActiveRecord::Base
attr_accessible :rating
belongs_to :user
has_many :tasks
end
当我尝试用 cucumber 测试它时,我定义了一个方法来创建多个用户
def create_confirmed_user(name,email,password)
user = User.new(name: name, email: email, password: password, password_confirmation: password, confirmed_at: DateTime.now)
user.skip_confirmation!
user.save
end
并从用户创建请求者
def create_requester_from_user(email, rating)
user = User.find_by_email(email)
requester = Requester.new(rating: rating)
requester.user = user
requester.save
binding.pry #To debug
0
end
当我用 pry 进行调试时,我发现requester.user
返回了一个用户,但r = Requester.first
随后r.user
返回 nil(我检查了r == requester
返回 true)。这很奇怪。
推测问题出在没有准备测试数据库,我跑去rake db:test:prepare
检查但r.user
仍然返回nil。
另一个问题:用这个模型,我可以打电话user.requester
让请求者属于这个用户吗?
还有一个问题是如何正确实现这个业务逻辑?单表继承 (STI) 是一个不错的选择吗?因为我用谷歌搜索发现使用 STI 有很多不好的副作用。