在Rails 4.1中保存两个相互引用的记录?

时间:2014-05-19 12:46:05

标签: ruby-on-rails rails-activerecord

直到Rails 4.1,可以在将更改提交到数据库之前启动事务,创建两条记录并引用它们。

记录处于多对多关系中,两端存在约束,即不能有空组,也不能属于至少一个组。

班级大纲:

class Person
  has_and_belongs_to_many :groups
  validates_presence_of :groups
end

class Group
  has_and_belongs_to_many :persons
  validates_presence_of :persons
end

交易代码示例:

Person.transaction do
  person = Person.new(...)
  group = Group.create!(..., persons: [person])
  person.groups << group
  person.save!
end

有没有办法将存在检查推迟到提交阶段?还有更好的建议吗?

1 个答案:

答案 0 :(得分:1)

只需使用inverse_of即可。这应该可以解决你的问题:

class Person
  has_and_belongs_to_many :groups, inverse_of: :groups
  ...
end

class Group
  has_and_belongs_to_many :persons, inverse_of: :persons
  ..
end