我有以下三种模式:
# model/timeline.rb
class Timeline
belongs_to :series
belongs_to :creator
end
def series_belongs_to_creator
if creator_id
creator = Creator.find_by id: creator_id
related_series = creator.series.find_by id: series_id
errors.add(:series_id, :not_found_series) unless related_series
end
end
# model/creator.rb
class Creator
has_many :timelines
has_many :series, through: :contents
end
# model/series.rb
class Series
has_many :timelines
has_many :creators, through: :contents
end
这不是很多关系,timelines
表在另一个字段旁边有两个字段creator_id
和series_id
。创建时间轴时必须输入creator_id
和series_id
,我有一个方法series_belongs_to_creator
来验证series_id
必须属于creator_id
才能创建成功。
那么如果使用FactoryGirl,我应该如何为时间轴模型编写工厂。我对Rails中的单元测试很困惑。
答案 0 :(得分:0)
如果您使用的是Rails 5,则必须注意默认情况下belongs_to
不再是可选的:https://blog.bigbinary.com/2016/02/15/rails-5-makes-belong-to-association-required-by-default.html
因此除非您指定关系是可选的,否则creator_id
总是需要存在。
对于工厂来说,你最终会得到这样的东西(FactoryGirl最近被重命名为FactoryBot): http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Associations
FactoryBot.define do
factory :timeline do
creator
series
end
end
FactoryBot.define do
factory :creator do
...
end
end
FactoryBot.define do
factory :series do
...
end
end