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