2012-01-02 4 views
1

Datamapper의 클래스에서 연관을 정의 할 때 기본적으로 관련 모델 데이터를 얻지 못하는 것 같습니다. 예를 들어DataMapper (Ruby)로 관련 모델 가져 오기

:

class Song 
    include DataMapper::Resource 

    property :id,   Serial 
    property :name,   String 
    property :artist_id, Integer 

    belongs_to :artist 
end 

class Artist 
    include DataMapper::Resource 

    property :id,  Serial 
    property :name,  String 

    has n, :songs 
end 

Song.get(params[:id]).to_json 

노래 쿼리는 기본적으로 예술가 테이블과 조인 수행하지 않습니다. 위의 예에서 노래를 따라 아티스트와 어떻게 합치고 참여할 수 있습니까? 두 클래스 중 하나만 쿼리하면 별도로 작동합니다. 이것은 DataMapper를 통해 생성되지 않은 기존 db입니다.

미리 감사드립니다.

답변

2

나는 당신이하려고하는 것이 현재 불가능하다고 생각합니다. DataMapper를 사용하면 노래 아티스트와 같은 속성을 언제든지 쉽게로드 할 수 있으며 전략적 열심히로드하는 것을 사용합니다 (here). 그러나 속성이 이미로드 된 경우에도 to_json에 의해 반환 된 결과에는 포함되지 않습니다.

은 그래서 당신은 두 가지 대안이 남아 있습니다 :

song = Song.get(params[:id]) 
json = song.attributes.merge({:artist => song.artist.attributes}).to_json 
  1. 당신은 포함 할 수 있습니다

    1. 당신은 단순히에 to_json을 사용하여 다음 해시를 작성하고 몇 가지 추가 코딩 작업을 수행 할 수 있습니다 Song 클래스 자체의 유사한 코드 :
    def to_json 
        self.attributes.merge({:time_zone => self.time_zone.attributes}).to_json 
    end 
    

    # 2로 작업하는 경우 require 'json'도 사용해야합니다.

    DataMapper가 to_json을 재귀 적으로 작업하게 만드는 것은 좋지 않습니다. 그렇지 않으면 전체 데이터베이스가 반환 될 수 있습니다. P