2009-07-21 12 views
12

İki modelim var, Kullanıcılar ve Gruplar. Her grupta çok sayıda kullanıcı olabilir ve her kullanıcı birçok grupta olabilir.Raylar (ActiveRecord) birçok tablodan çok

Şu anda gibi basit bir şey var:

Kullanıcı:

has_many :groups 

Grup:

has_many :users 

Yani sadece GROUP_ID ve user_id ile satırları yaratıyor bir groups_users tablo var. Buna başka bir sütun eklemek istiyorum (ki sahip olduğum), soru bir modele özel bir SQL çağrısı kullanmadan nasıl erişebilirim? Grup modelinde ben self.users ve git gidebilirim ve ben kendim groups gidebilirim

Bu tablodaki üçüncü sütunu bir kullanıcı modelinden değiştirmenin bir yolu var mı? Bu kafa karıştırıcı ise, İşte bu

cevap

12

tavsiyelerde lütfen

Maalesef yardımcı olmalıdır öğreticiler bir çift. Temel olarak, çoktan çoğa çalışma yapmak için iki yaklaşım vardır, ya has_and_belongs_to_many ya da has_many: through (önerilir).

bağlantılar:

  1. http://blog.hasmanythrough.com/2006/4/20/many-to-many-dance-off
  2. http://railscasts.com/episodes/47-two-many-to-many
  3. http://railscasts.com/episodes/154-polymorphic-association
+0

Özellikle 2 bağlantı. Eylemde has_and_belongs_to_many büyük bir örnek. –

+0

Bu linkler hala alakalı mıdır? – shem

2

ben [ekledi] [users_groups] olarak başka bir sütun ... soru Erişimim böyle yaparız özel bir SQL c kullanmadan bir modelden herşey? Eğer User modeline veya Group modeline bir yöntem arayarak user_groups tablonun bir sütun erişmek istediğiniz gibi

geliyor.

bazı öneriler:

Ben activerecord en çoğulculuk beklentileri ile çalışmak tabloyu "user_groups" adını isterdim ama esastır olup olmadığından emin değilim. Dave tavsiyelerine uyarak

, sen

# Declare a Model based on the many-to-many linking table. 
class UserGroup < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :group 
end 

class User < ActiveRecord::Base 
    has_many :user_groups 
    has_many :groups, :through => :user_groups 
end 

class Group < ActiveRecord::Base 
    has_many :user_groups 
    has_many :users, :through => :user_groups 
end 

kullanıcı modelinden bu tabloda üçüncü sütun değiştirmek için bir yolu var mı ... " has_many :through" tekniği kullanılarak şeyler kurmak isterdim ?

Bu biraz belirsizdir, fakat her UserUserGroups çok şey var olabilir unutmayın. Yani üçüncü sütunu değiştirmek isterseniz, aradığınız alanı bulmanız gerekir.

+0

UserGroup tablosunda fazladan veriye ihtiyacınız yoksa, ActiveRecord'u tamamen atlayın ve birleştirme tablosuyla Kullanıcı ve Grup arasında 'has_and_belongs_to_many' birliği kullanın. Diğer cevapta ikinci bağlantıya bakın. Django'da –

+0

, çok sayıda birçok yardımcı tabloya üçüncü bir sütun eklemek kolaydır: sadece alanı "geçiş" ile de eriştiğiniz modele ekleyin. Örneğinizdeki başka bir sütun, e. g. kullanıcıya gruba belirli bir durum (aktif veya değil) vermek istiyorum. – Timo

7

Rails 3'te, çok sayıda ilişki için birleştirme tablosunu, alfabetik sırada birleştirmek istediğiniz tabloların çoğul adlarını kullanarak yapmak istiyorsunuz. Yani bu durumda groups_users olur.

modelleri

class GroupsUser < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :group 
end 

class User < ActiveRecord::Base 
    has_many :groups_users 
    has_many :groups, :through => :groups_users 
end 

class Group < ActiveRecord::Base 
    has_many :groups_users 
    has_many :users, :through => :groups_users 
end 
+1

Görünümde ilgili bir alana nasıl erişileceğini bilmek ilginç olabilir – Timo