2013-03-06 1 views
0

У меня есть модель сюжета и модель публикации. В каждой истории много сообщений.Возврат только первого дочернего элемента в дочернем узле

В моей статье # index action Я хотел бы использовать rabl для возврата всех @stories, и каждая история в @stories также должна включать дочерний узел, содержащий атрибуты из его последнего созданного сообщения.

Вот ближе всего, что я пришел к достижению того, что я ищу:

#show.json.rabl 

object @story 

attributes :id, :title, :username 

child @story.posts.first => :latest_post do 
    attributes :id, :story_id, :contents, :username 
end 

Это прекрасно работает в истории # шоу действий. Но когда я пытаюсь расширить его с действием истории # указательного

#index.json.rabl 

collection @stories 

extends "stories/show" 

я получаю следующее сообщение об ошибке:

ActionView::Template::Error (undefined method `posts' for nil:NilClass): 
    1: collection @stories 
    2: 
    3: extends "stories/show" 
    app/views/stories/show.json.rabl:8:in `render' 

Я считаю, что я получаю эту ошибку, потому что я не устанавливая @story экземпляра переменная, используемая представлением show.json.rabl. Но я не уверен, как обойти это и передать show.json.rabl правильный объект истории.

Любая помощь была бы принята с благодарностью!

ответ

2

Для решения этой проблемы я использовал частичный rabl. Вот как:

#story.show.json.rabl 

object @story 

attributes :id, :title, :username 

node :latest_post do |story| 
    { :post => partial("posts/show", :object => story.posts.first)} 
end 

#story.index.json.rabl 

collection @stories 

extends "stories/show" 

post.show.json.rabl 

object @post 

attributes :id, :story_id, :contents, :username 

Это работает точно так же, как требуется.

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

  • Нет связанных вопросов^_^