2012-02-24 140 views
5

我正在使用RABL gem來爲評論的用戶呈現JSON用戶數據,這些用戶是作爲圖像的子代的註釋的子代。我想要做類似的東西:Rails 3.1與RABL深嵌套

object @image 

node :annotations do 
    @image.annotations.map { |a| { 
    :id => a.id, 
    :x1 => a.x1, 
    :x2 => a.x2, 
    :y1 => a.y1, 
    :y2 => a.y2, 
    node :comments do 
     @image.annotations.comments.map { |c| { 
     :body => c.body, 
     :user_id => c.user_id, 
     :name => User.find(c.user_id).name, 
     :user_icon => user_icon(User.find(c.user_id), 'square', 30) 
     }} 
    end 
    }} 
end 

我知道這是不是有效的Rabl的,我也嘗試過使用兒童,而不是節點,但無法訪問用戶數據的方式。我應該如何去做這件事,以及什麼是適當的語法來做到這一點?

回答

8

我從@calvin-l得到了這個答案。訣竅是僅僅映射a.comments,然後從每條評論中以這種方式獲取數據:

node :annotations do 
    @image.annotations.map { |a| { 
    :id => a.id, 
    :x1 => a.x1, 
    :x2 => a.x2, 
    :y1 => a.y1, 
    :y2 => a.y2, 
    :comments => a.comments.map { |c| { 
     :body => c.body, 
     :created_at => c.created_at, 
     :user => { 
     :id => c.user.id, 
     :facebook_id => c.user.facebook_id, 
     :name => c.user.name, 
     :username => c.user.username 
     } 
    }} 
    }} 
end 
+0

+1。這種在塊中創建散列的方式可以節省幾條線,但它有點令人困惑(和單一性)。我正要更新它,但是,我想這畢竟不是很糟糕。 – tokland 2012-12-13 10:13:44