我的业务逻辑如下:我有很多用户。每个用户都可以是请求者或工作者。
这是我在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
当我尝试用黄瓜进行测试时,我定义了一种创建多个用户的方法
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有很多不良副作用。
答案 0 :(得分:1)
答案 1 :(得分:0)
我已经从这篇文章中发现了问题Using build with a has_one association in rails:我修改了模型而没有创建迁移。我需要在将belongs_to
添加到我的请求者模型后运行此迁移:rails generate migration add_user_id_to_requester user_id:integer
。令人惊讶的是,许多文件都没有提到这一点。