2012-04-20 7 views
0

2つのモデルが互いに関連していて、それらを両方ともRailsコントローラのアクションから返す必要があります。RailsコントローラからDatamapperを使用してオブジェクトを返す

2つのクラスは、ユーザーと場所です。リンククラスUserLocationもあります。

User.rbは、次のようになります。

class User 

    include DataMapper::Resource 

    ... 
    has n, :user_locations 
    has n, :locations, :through => :user_locations 

end 

UserLocation.rb:

class UserLocation 

    include DataMapper::Resource 

    # attributes 
    property :id, Serial 

    # relationships 
    belongs_to :user 
    belongs_to :location 

    # validation 
    validates_presence_of :user, :location 

end 

Location.rb:

class Location 

    include DataMapper::Resource 

    # attributes 
    # no need to specify the user relation AFAIK 

end 

私はUser.get(id)を行うと、それはすべてのユーザー属性を返します。場所は含まれていません。コードをデバッグしてuser.locationsを実行すると正しく動作します。なぜレールアクションから返される場所はありませんか?

答えて

0

これはうまくいくはずです。リレーションは別々のSQLリクエストでロードされますが、遅くて複雑な場合があります。ロードするリレーションを正確に指定する必要があります。すべての関係を1つの呼び出しでロードすることを想像してください。getコール - それは私を混乱させます。

+0

したがって、ロードする関係をどのように指定するのですか? – Ger

+0

あなたは '#get'で関係をロードしません。あなたは 'user.locations'を呼び出し、その結果を使用します。 – ujifgc

関連する問題