2012-04-20 50 views
0

我有兩個彼此相關的模型(多對多),我想在我的Rails控制器操作的響應中返回它們。使用Datamapper從Rails控制器返回關聯對象

這兩個類是用戶和位置。還有一個鏈接類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請求,它可能很慢並且很複雜,並且您應該準確指定要加載的關係。想象一下加載所有關係到一個get電話 - 這會讓我一團糟。

+0

那麼如何指定我希望加載的關係? – Ger 2012-04-21 11:58:47

+0

您不會在'#get'上加載關係。你調用'user.locations'並使用它的結果。 – ujifgc 2012-05-01 06:16:02