5

Я использую драгоценный камень RABL для отображения пользовательских данных 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. Хитрость состояла в том, чтобы просто нанести карту на сайт, а затем извлечь данные из каждого комментария таким образом:

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

Смежные вопросы