Rails:关联模型唯一的多个外键约束



我在这里无法实现我想要的,但我感觉在 Rails 中是可能的。

我有两个模型和一个关联模型。

class Object < ActiveRecord::Base
  attr_accessible :object_types_asso, :object_types_asso_attributes
  accepts_nested_attributes_for :object_types_asso, :allow_destroy => true

  has_many :types, :through => :object_types_asso
  has_many :object_types_asso
end
class Types < ActiveRecord::Base
  attr_accessible :object_types_asso, :object_types_asso_attributes
  accepts_nested_attributes_for :object_types_asso, :allow_destroy => true
  has_many :object, :through => :object_types_asso
  has_many :object_types_asso
end
class ObjectTypesAsso < ActiveRecord::Base
  attr_accessible :object_id, :type_id
  belongs_to :object
  belongs_to :types
end

我想对ObjectTypesAsso有一个活动的记录单性约束,这样我就不会有两个ObjectTypesAsso记录具有相同的:object_id:type_id,这样当一个存在时,它会更新而不是创建一个新的(如果无法更新,则忽略(。

我怎样才能做到这一点?

问题的第二部分是我如何管理assos执行以下操作:

object.update_attributes({:object_types_asso_attributes => [{:types_id => xx}, {:types_id => yy}]})

如果它们不存在,它会创建带有 types_id=xxtypes_id=yy 的 asso,如果它不存在,则删除types_id=zz,因为它不在列表中。这个想法是有一个复选框列表来更新关联,无论它是否被选中。

我也可以这样做吗?

谢谢

对于您的第一个问题,您希望 ObjectTypesAsso 在 :object_id 和 :type_id 属性上是唯一的

validates :object_id, :uniqueness => {:scope => :type_id}

Rails 3 对多个属性的唯一性验证

对于第二个问题,如果我了解你想做什么,你可以像这样写类型列表:

object.types = [Types.find(xx), Types.find(yy)]

最新更新