0

ストーリーモデルとポストモデルがあります。各ストーリーには多くの投稿があります。

私のstory#indexアクションでは、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

これは、stories#showアクションで正常に機能します。しかし、stories#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'

show.json.rablビューで使用される@storyインスタンス変数を設定していないため、このエラーが発生すると思います。しかし、これを回避して、show.json.rablに正しいストーリーオブジェクトを渡す方法がわかりません。

どんな助けでも大歓迎です!

4

1 に答える 1

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

これは、必要に応じて正確に機能します。

于 2013-03-06T19:27:44.700 に答える