我的模型定义如下
class One <Active:Record:Base
{
has_and_belongs_to_many :twos, {:join_table => 'map__ones__twos'}
}
class Two <Active:Record:Base
{
has_and_belongs_to_many :ones, {:join_table => 'map__ones__twos'}
}
我希望两个名称属性对于一个范围应该是唯一的。这意味着属于一个的两个人应该有唯一的名字。在这里,我无法在两个模型
中指定下面的内容 validates_uniqueness_of :name, :scope => one_id
因为on_id不是两个表的列。而是通过表map_ 一些 _twos(多对多关系)将one_id和two_id相互映射
请建议
答案 0 :(得分:1)
我经常发现使用has_and_belongs_to_many比使用它更麻烦。当我有多对多的关系时,我会创建一个连接表并为它创建一个模型。然后,连接模型可以验证两个id的唯一性。
请原谅这些名字。我正在使用您问题中的示例表名称。在您的情况下,这看起来像:
class MapOnesTwo < ActiveRecord::Base
belongs_to :one
belongs_to :two
validates_presence_of :one_id, :two_id
validates_uniqueness_of :one_id, :scope => :two_id
end
您的One模型如下所示:
class One < ActiveRecord::Base
has_many :ones_twos, :dependent => :destroy
has_many :twos, :through => :ones_twos
end
你的两个模型看起来像这样:
class Two < ActiveRecord::Base
has_many :ones_twos, :dependent => :destroy
has_many :twos, :through => :ones_twos
end