Rails:如何在belongs_to + has_many关系中创建一条新记录,两端验证彼此的存在?

时间:2015-03-12 23:09:36

标签: ruby-on-rails ruby-on-rails-4

我正在了解关联,而且我在创建新记录方面遇到了麻烦。

我有一个游戏模型,他/她的实例必须属于制造商,所以我使用了状态验证。

制造商可以拥有多个与之相关的游戏,因此从制造商的角度来看,游戏有很多关系。此外,我想确保只有与游戏相关联的制造商才能创建(通过验证)(我不想跟踪任何没有任何游戏相关的制造商)。

以下是代码:

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的列)

1 个答案:

答案 0 :(得分:0)

你可以试试这样的事吗?

game = Game.new
manufacturer = Manufacturer.new(games: [game])
manufacturer.save

然后开启

class Manufacturer < ActiveRecord::Base
  has_many :games, autosave: true
  # etc etc
end
相关问题