2013-03-06 92 views
0

我有一個故事模型和一個後期模型。每個故事都有很多帖子。只返回子節點中的第一個孩子

在我的故事#索引行動中,我希望使用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 

這個作品在故事#show行爲的罰款。但是,當我試圖把它與故事#index動作

#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

我用一個拉布爾部分來解決這個問題。具體方法如下:

#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 

這個作品完全一樣需要。

相關問題