7

Burada avuç içi alın tehlikesi var, ancak bunu Rails ActiveRecord şekeri ile nasıl yapacağımı tam olarak anlayamıyorum. Bir tablo noktasında ActiveRecord ile aynı sütuna iki sütun nasıl alabilirim?

iki sütun, her ( users tabloda özel id kolonu) users tablodan farklı bir kullanıcı referans gerekir ( submitter_id ve assignee_id) sahip bir tickets tablo var. ActiveRecord derneklerini kullanarak ticket.submitter.name ve ticket.assignee.email gibi şeyleri yapmak istiyorum. Submiter ve Assignee farklı ilişkilendirici isimler altında basitçe kullanıcı nesneleridir.

Yaptığım şeye yakın olarak bulduğum tek şey polimorfik çağrışımlar kullanmaktı, ancak sonunda gerçekten ihtiyacım olan şeyin tam olarak belli olmadığına inanıyorum. Birden fazla türde olmayacağım, hem gönderen hem de devralan kullanıcılar olacak ve çok iyi iki farklı kullanıcı olabilir.

Her türlü yardım harika olurdu. Teşekkürler!

cevap

14
class Ticket < ActiveRecord::Base 
    belongs_to :submitter, :class_name => "User" 
    belongs_to :assignee, :class_name => "User" 
end 

Shoul d iş.

Düzenleme: Denemeyi denemeden, aşağıdakilere ihtiyacınız olup olmadığından emin değilim: foreign_key parametresi olsun veya olmasın. Benim içgüdüm değil, ama acıdı.

Tekrar düzenleme yapın: Üzgünüz, Kullanıcı -> Bilet ilişkilerini bıraktı. Onları kullanmadan bahsetmediniz ve bunları başka bir yönde kullanmayı planlamıyorsam, genellikle yalnızca bir yönde ilişkilendirmeler ekleyeceğim.

Yine, deneyin: ilişki adından türetilemediyse

class User < ActiveRecord::Base 
    has_many :assigned_tickets, :class_name => "Ticket", :foreign_key => "assignee_id" 
    has_many :submitted_tickets, :class_name => "Ticket", :foreign_key => "submitter_id" 
end 
+0

Kesinlikle avuç içi alın anı. Orada olduğunu biliyordum, ama sanırım hafızasına erişemedim. Bana yardım ettiğin için teşekkürler! – localshred

+0

Bu cevap çok fazla zaman kazandı, _thank you_. – potashin

5

Böyle bir şey

class Ticket < ActiveRecord::Base 
    belongs_to :submitter, :class_name => 'User', :foreign_key => 'submitter_id' 
    belongs_to :assignee, :class_name => 'User', :foreign_key => 'assignee_id' 
end 

class User < ActiveRecord::Base 
    has_many :tickets, :class_name => 'Ticket', :foreign_key => 'submitter_id' 
    has_many :tickets_assigned, :class_name => 'Ticket', :foreign_key => 'assignee_id' 
end 

Evet, PreciousBodilyFluids raylar sütun adı, yani submitter_id onu anlaması gibi biz Bilet sınıfında foreign_key belirtmek gerekmez doğru çalışıp

assignee_id gerektiğini

Ama dernek adı column_name_ {id} farklıysa o zaman Kullanıcı sınıfı durumda yani bunu belirtmek zorunda kalacak

+0

yabancı anahtar belongs_to bildiriminde gereksizdir. – EmFi

+0

Haklısın ve bu yüzden cevabımda da belirtmiştim :) – nas