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

时间:2013-10-11 23:26:26

标签: ruby-on-rails ruby-on-rails-3 activerecord foreign-keys

我无法达到我想要的目标,但我觉得在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相关的组合,如果它存在,则删除types_id=zz,因为它不在列表中。我们的想法是拥有一个复选框列表,用于更新检查或不检查的关联。

我可以这样做吗?

由于

1 个答案:

答案 0 :(得分:1)

对于您的第一个问题,您希望ObjectTypesAsso在以下内容上是唯一的:object_id和:type_id attributes

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

rails 3 validation on uniqueness on multiple attributes

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

object.types = [Types.find(xx), Types.find(yy)]
相关问题