我从 rspec 开始,所以我不知道如何进行以下操作:
我在 和 之间有一个多对多表User
,Label
称为Assignment
. 例如
- “用户 A”分配给“IT”
- “用户 B”被分配给“研究”
制造商:
Fabricator(:label) do
name { sequence(:name) { |i| "Label #{i}" } }
end
Fabricator(:user) do
email { sequence(:email) { |i| "user#{i}@email.com" } }
password 'password'
end
楷模:
class Label < ActiveRecord::Base
has_many :issues
has_many :assignments
has_many :users, :through => :assignments
class User < ActiveRecord::Base
has_many :assignments
has_many :labels, :through => :assignments
class Assignment < ActiveRecord::Base
belongs_to :user
belongs_to :label
end
class Issue < ActiveRecord::Base
belongs_to :user
belongs_to :label
after_create :print_first_user_label_email
def print_first_user_label_email
puts self.label.users.first.email
end
end
每次我创建问题时,问题都必须打印分配给问题标签的用户。但它要求标签应该已经与用户(分配)有链接。
因此,一个简单的 Fabricate(:issue) 将触发:
let(:issue) { Fabricate(:issue) }
-- Output ---------------------------------------
Failure/Error: let(:issue) { Fabricate(:issue) }
NoMethodError:
undefined method `email' for nil:NilClass
那么,我该如何解决。存根?以某种方式在桌子上播种?在制造商中定义?
任何帮助都会很棒!