我在这里无法实现我想要的,但我感觉在 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
的 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)]