Rails 3 response_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 возвращать @comment, используя 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