2010-11-20 15 views
3

: birçok konumu olsa Raylar gelişmiş dernek

class MyModel < ActiveRecord::Base 
    has_many :locations 
    has_one :location, :class_name => 'Location', :join => "RIGHT JOIN locations ON locations.user_id=mymodels.user_id" 
end 

Yani MyModel sadece her kullanıcı için bir konum olabilir. Bunu nasıl tanımlayabilirim? Teşekkürler!

cevap

4

adlandırma dernekler böyle MyModel.first.user.location ile kullanıcı yerini alabilir Bir model isminin tekil formları kafa karıştırıcı olabilir, aynı zamanda yöntem çakışmasıyla sonuçlanabilir. En iyi uygulamalar, genellikle ham SQL sağlamanız gerekmez. Senin davanın bir istisna değil.

Ayrıca MyModel Kullanıcıya ait gibi görünüyor. SQL dayalı aşağıdaki modelleri Assumeing

Gönderildiği: Ve Kullanıcı o zaman böyle bir şey yapabileceği yerler ile birçok ilişki bir tane görünüyor

class User < ActiveRecord::Base 
    has_many :my_models 
    has_many :locations 
end 

class Location <ActiveRecord::Base 
    belongs_to :my_model 
    belongs_to :user 
end 



class MyModel < ActiveRecord::Base 
    has_many :locations 
    belongs_to :user 
    has_one :user_location, through => :user, :source => :location 
end 

Ancak, bilmiyorum hangi konum Kullanıcının birçok yeri varsa, alacaksınız. Ama en az bir tane varsa, garantili olursun.

2

Yanılıyor olabilirim ...

class MyModel < ActiveRecord::Base 
    has_many :location 
    belongs_to :user 
end 

class Location< ActiveRecord::Base 
    belong_to :my_model 
end 

class User< ActiveRecord::Base 
    has_one :my_model 
end 

Eğer çoğul ve her ikisi için de bir dernek olduğunu

+1

Has_many ilişkilendirmeleriniz var, bu nedenle bunu bir tür birleştirme olarak tanımlayabilmeniz gerekir. Ayrıca 100 sonuçların bir listesini hayal edin ve veritabanına sadece 1 talep etmek istiyorsunuz. – xpepermint