23

Tablodan kimlik olmayan bir sütuna göre arama yapmak için ActiveRecord istiyorum. Umarım kod örneğimi verdiğimde bu açıktır. Ben coach_obj.coach_classes yaptığınızdaRaylar: Harici olmayan anahtar arama ActiveRecord

class CoachClass < ActiveRecord::Base 
    belongs_to :coach 
end 

class Coach < ActiveRecord::Base 
    has_many :coach_classes, :foreign_key => 'user_name' 
end 

, bu haklı

SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = 2) 

istediğim o

tetiklemek için (2 benim sorun olduğunu Koçun id burada. Olmak üzere) tetikler
SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = 'David') 

('David' bu teknik direktörünHer iki tabloda da benzersiz ve mevcut olan

.

coach_id benim coach_classes tablonun bir nedenine sahip olmak istemiyorum.

+0

İstenmeyen tavsiyeler: tabloya bir coach_id eklemeyi düşünebilirsiniz, bu ilişkinin iç içe geçmiş ve daha geleneksel hale gelmesi daha kolay hale getirecektir. –

+0

Teşekkürler Jed. Ama ben bir sebepten dolayı coach_id istemiyorum. – Garfield

cevap

51

ben siz de dernekler üzerinde birincil anahtar seçenekleri belirlemek gerektiğini düşünüyorum:

class CoachClass < ActiveRecord::Base 
    belongs_to :coach, :foreign_key => 'user_name', :primary_key => 'user_name' 
end 

class Coach < ActiveRecord::Base 
    has_many :coach_classes, :foreign_key => 'user_name', :primary_key => 'user_name' 
end 

Bu ilişkili nesne (id varsaymak) birincil anahtarı döndüren yöntemi kapsar.

+0

John, Derneğin diğer tarafının burada bir etkisi olduğundan emin misin? Biri, diğer taraftaki '' aittir '' olmadan 'has_many' olabilir. –

+0

@neutrino Cevabımı düzenledim. –

+0

Teşekkürler John! Şimdi nasıl görüneceğine dair daha net. – Garfield

-4

Sen finder_sql kullanmak gerekir:

class Coach < ActiveRecord::Base 
    has_many :coach_classes, :finder_sql => 'SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = "#{user_name}")' 
end 
+0

Not - bunu daha sonraki sürümlerde aldılar. Onların 'büyüsü' ihtiyaç duyduğunuz işlevselliğe sahip olmadığında gerçekten bir cankurtaran. – JosephK

9

:id ayarlı varsayılan başınadır primary_key denilen bir seçenek yoktur.

Ayrıca belongs_to dernek Bu seçenekleri: Sen kullanmak istiyorum.

documentation adresinde daha fazla bilgi alabilirsiniz.

İlgili konular