2012-02-24 33 views
5

Tôi đang sử dụng đá quý RABL để hiển thị dữ liệu người dùng JSON cho người dùng nhận xét là con của chú thích là con của hình ảnh. Tôi muốn làm điều gì đó tương tự như:Rails 3.1 làm tổ sâu với 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 

Tôi biết điều này là không hợp lệ trong RABL, tôi cũng đã cố gắng sử dụng con thay vì nút, nhưng không thể truy cập vào dữ liệu người dùng theo cách đó. Làm thế nào tôi nên đi về việc này và những gì các cú pháp thích hợp để làm cho điều này xảy ra?

Trả lời

8

Tôi nhận được câu trả lời này từ @calvin-l. Bí quyết là chỉ lập bản đồ a.comments rồi lấy dữ liệu từ mỗi nhận xét theo cách đó:

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. cách tạo một băm trong một khối sẽ tiết kiệm một vài dòng nhưng nó hơi khó hiểu (và không đơn điệu). Tôi sắp sửa cập nhật nó, nhưng tôi đoán nó không quá tệ. – tokland