2010-10-22 13 views
5

:Birleştirme modelinde benzersizliği zorlama hakkı mı? (Has_many: aracılığıyla) Ben bir üst/gibi modeller ile kullanıcılarımızın masaya yoluyla alt ilişkisi var

class User < ActiveRecord::Base 

    # Parents relationship 
    has_many :children_parents, :class_name => "ParentsChild", :foreign_key => "child_id", :dependent => :destroy 
    has_many :parents, :through => :children_parents 

    # Children relatiopnship 
    has_many :parents_children, :class_name => "ParentsChild", :foreign_key => "parent_id", :dependent => :destroy 
    has_many :children, :through => :parents_children 
    ... 
end 

Ve parents_child.rb içinde: Şu anda

class ParentsChild < ActiveRecord::Base 

    belongs_to :parent, :class_name => "User" 
    belongs_to :child, :class_name => "User" 

end 

, bu mümkün Ebeveynler için birden fazla kez aynı kullanıcıyı eklemek için "çocuk ekle" formunda (sadece vanilya iç içe öznitelikleri kullanarak). Veri katmanında (parent_id, child_id) üzerinde (tabii ki bir geçişi kullanarak) benzersiz bir dizine doğru eğilmeme rağmen, ParentsChild ilişkisinde benzersizliği zorlamaya dair 'doğru' yolun ne olduğundan emin değilim.

Ayrıca, UsersController :: update yönteminde benzersizlik kısıtlamalarını da uygulayabildiğime, ancak bu kodu değiştirmekten kaçınmayı tercih edeceğime eminim (şu anda formda yuvalanmış öznitelikler sayesinde ebeveynlere/çocuklara başvurmuyor)/model) mümkünse. "Doğru" çözümü kullandığımızdan emin olmakla ilgili olarak çok endişeliyim. Bunu yapmak için 'doğru' veya 'raylar' yolu nedir? has_many kullanarak

cevap

6

: aracılığıyla, şunları belirtebilirsiniz: uniq bir seçenek olarak, örneğin:

has_many :parents, :through => :children_parents, :uniq => true 
+1

Kesinlikle ilk mümkün olan en basit çözümü baktım gerekirdi. Teşekkürler! –

+0

Evet! Bununla çok uzun zaman geçiriyorum, cevabım tam ihtiyacım olan şeydi. – Matthew

+5

veya raylarda 4, 'has_many: ebeveynler, -> {uniq},: through =>: children_parents' – courtsimas

İlgili konular