class Match
has_many :items
end
class Item
belongs_to :match
validates :match, presence: true
end
class ItemBuilder
def self.build
5.times.map { |_| Item.new }
end
end
class MatchBuilder
def self.build
Match.new(items: ItemBuilder.build)
end
end
match = MatchBuilder.build
match.save # Validation fails because Item#match isn't set!
在我看来,rails在分配Item#match
时应该设置Match#items
关联,但事实并非如此。
实际上,ItemBuilder
根据API中的信息构建项目。我不希望知道这些项目的放置位置,因此我无法将匹配传递到ItemBuilder
。
我也不希望Matchbuilder
知道从ItemBuilder
返回的项目的内部,所以我无法做到
class MatchBuilder
def self.build
items = ItemBuilder.build
match = Match.new(items: items)
items.each do |item|
item.match = match
end
end
end
有没有办法解决这个问题,而没有明确设置Item#match
?
Item#match
答案 0 :(得分:2)
我会做这样的事情:
match = Match.new
5.times { match.items.build }
match.save
在这种情况下,不确定项目关联是否需要autosave: true
。