我正在了解关联,而且我在创建新记录方面遇到了麻烦。
我有一个游戏模型,他/她的实例必须属于制造商,所以我使用了状态验证。
制造商可以拥有多个与之相关的游戏,因此从制造商的角度来看,游戏有很多关系。此外,我想确保只有与游戏相关联的制造商才能创建(通过验证)(我不想跟踪任何没有任何游戏相关的制造商)。
以下是代码:
class Game < ActiveRecord::Base
belongs_to :manufacturer
validates :name, presence: {message: 'The game name is required'}
validates :description, presence: {message: 'A short game descripton is required'}
validates :manufacturer, presence: true
end
class Manufacturer < ActiveRecord::Base
has_many :games
validates :name, presence: {message: 'The manufacurer name is required and must be unique'}
validates :name, uniqueness: {message: 'A manufactuer by this name already exits.'}, if: "name.present?"
validates :games, presence: { message: 'Every manufacturer must be associated with at least one game.' }
end
因此,您可以看到两者都相互验证,因此没有制造商就没有游戏,也没有没有游戏的制造商。
我很难尝试在数据库中创建新记录,因为要创建游戏我需要在数据库中有一个制造商,但我无法创建制造商,因为它需要与游戏相关联(它是一种循环)。
鉴于此验证限制,如何创建新记录? (DB正确设置了外键和ids的列)
答案 0 :(得分:0)
game = Game.new
manufacturer = Manufacturer.new(games: [game])
manufacturer.save
然后开启
class Manufacturer < ActiveRecord::Base
has_many :games, autosave: true
# etc etc
end