2010-11-20 10 views
3

:それは多くの場所を持っているものの Railsの高度な関連

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 

だからmymodelというのだけユーザーごとに1つの場所を持つことができます。 どうすれば定義できますか?どうも!

答えて

4

ネーミング団体でユーザーの位置を取得することができますし、モデル名の単数形は混乱する可能性があり、メソッドオーバーラップの原因にもなりかねません。ベストプラクティスとは別に、通常は生のSQLを提供する必要はありません。あなたのケースも例外ではありません。

MyModelもUserに属しているようです。そして、ユーザは、あなたがこのような何かを行うことができます場所と一対多の関係を持つように表示されます。SQLに基づいて、次のモデルをAssumeing

投稿:

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 

をしかし、あなたはどの場所がわかりませんユーザーが多くの場所を持っている場合は、あなたは取得しようとしています。しかし少なくとも1つがあればあなたは1つ保証されます。

2

私は間違っているかもしれない...

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 

あなたが複数の両方のための関連性を有するようにMyModel.first.user.location

+1

has_many関連があるので、何らかの結合として定義できる必要があります。また、100件の結果のリストを想像し、データベースへのリクエストを1つだけにしたいとします。 – xpepermint

関連する問題