Rails 3 respond_with: показване показва оформление при създаване на ресурс

Имам comment ресурс. Имам контролер, който обработва respond_with и за момента се предполага, че той обслужва всички JSON отговори (което се случва правилно). Използвам Rabl, за да се справя с изобразяването си на JSON/XML, и изсушавам нещата малко. Имам правилния начин, по който искам comment да бъде изобразено на comments/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

Това не работи; той просто връща плоска JSON реализация на comment с всички атрибути върху него. Не използва моя show.rabl в comments/show.rabl. Как да накарам моето действие create да върне @коментар, използвайки show.rabl като оформление?

Виждам тази публикация посочва пълния път и разширението на файла с оформлението; Не би трябвало да правя това, нали? Използвам ли грешен :symbol_option? Трябва ли да е :location?


person Ben Kreeger    schedule 01.12.2011    source източник
comment
разгледайте jbuilder   -  person Damien    schedule 02.12.2011


Отговори (3)


Успях да разреша този проблем, като създадох шаблон на Rabl на адрес comments/create.rabl.

object @comment

extends "comments/show"

И това е всичко, което тя написа. Rails търси изгледа create.rabl, който приема един обект и просто изобразява полетата, дефинирани в comments/show.rabl.

Благодаря на Мартин Хариган, че ми напомни, че въпросът ми все още е отворен!

person Ben Kreeger    schedule 02.01.2012

Можете да използвате, за да останете сухи:

render :show, :status => :created
person Aymeric    schedule 30.07.2012

В Rails4 можете да посочите шаблон:

def create
  respond_with @comment, status: :created, template: 'comments/show'
end
person wildDAlex    schedule 18.03.2014