3

私はcommentリソースを持っています。を処理するコントローラーがrespond_withあり、今のところ、すべての JSON 応答を提供することになっています (これは正しく行われています)。私はRablを使用して JSON/XML レンダリングを処理しており、少し DRY しています。でレンダリングしたい適切な方法があります。commentcomments/show.rabl

object @comment

attributes :id, :body, :a_few_more_things

POST 呼び出しが行われると/comments/(createコントローラーでメソッドが起動されます)、Rails がビュー (上記)commentと同じ形式でを返すようにします。show私は、私のcreate機能で...

def create
  # Skip some code, save it, ya-da ya-da
  respond_with(@comment, :layout => 'comments/show')
end

これは機能していません。commentすべての属性を含むのフラットな JSON 実装を返すだけです。私のshow.rablatを使用していませんcomments/show.rablレイアウトとして使用して @comment を返すアクションを取得するにはどうすればよいですか?createshow.rabl

この投稿では、レイアウト ファイルのフル パスと拡張子が指定されています。そんなことしなくてもいいじゃないですか。私は間違って使用してい:symbol_optionますか?それはすべき:locationですか?

4

3 に答える 3

3

で Rabl テンプレートを作成することで、この問題を解決できましたcomments/create.rabl

object @comment

extends "comments/show"

そして、それが彼女が書いたすべてです。Rails はcreate.rablビューを探します。このビューは 1 つのオブジェクトを受け取り、 で定義されたフィールドをレンダリングするだけですcomments/show.rabl

Martin Harriganに感謝します。私がまだ質問を開いていることを思い出させてくれました!

于 2012-01-02T19:18:29.663 に答える
0

Rails4 では、テンプレートを指定できます。

def create
  respond_with @comment, status: :created, template: 'comments/show'
end
于 2014-03-18T11:05:41.093 に答える
0

乾いた状態を保つために使用できます:

render :show, :status => :created
于 2012-07-30T12:57:22.337 に答える