2013-10-11 86 views
0

我無法實現我想要的東西,但我有感覺它可能在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,因此,當一個存在,它就會被更新,而不是創造的新的(如果不可能更新,則忽略)。

我怎麼能做到這一點?

問題的第二部分是我怎麼能管理阿索斯做這樣的事情:

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

,並與types_id=xxtypes_id=yy如果他們不存在創建ASSO,並刪除types_id=zz因爲如果它存在它不在列表中。這個想法是有一個複選框列表,更新它檢查與否的關聯。

我也可以這樣做嗎?

感謝

+0

你在尋找has_many:通過? – fotanus

+0

你的權利,我忘了在我的例子中添加它。但那不是我所期待的。 –

回答

0

關於第一個問題,你想ObjectTypesAsso是獨特的:OBJECT_ID和:TYPE_ID屬性

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

rails 3 validation on uniqueness on multiple attributes

對於第二個問題,如果我理解你婉什麼要做的,你可以寫出類似這樣的列表:

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