2012-02-24 18 views
5

Używam gem RABL do renderowania danych użytkownika JSON dla użytkowników komentarzy, które są dziećmi adnotacji będących dziećmi obrazów. Chciałbym zrobić coś podobnego do:Rails 3.1 głębokie zagnieżdżanie z 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 

Wiem, że nie jest ważna w Rabl, próbowałem też stosując zamiast węzła dziecko, ale nie może uzyskać dostępu do danych użytkownika w ten sposób. Jak mam to zrobić i jaka jest właściwa składnia, aby tak się stało?

Odpowiedz

8

Mam tę odpowiedź od @calvin-l. Sztuką było tylko mapowanie a.com, a następnie pobranie danych z każdego komentarza w ten sposób:

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. ten sposób tworzenia skrótu w bloku oszczędza kilka linii, ale jest nieco zagmatwany (i jednoznaczny). Miałem zamiar to zaktualizować, ale cóż, myślę, że wcale nie jest tak źle. – tokland