Rails 3 response_with: показывать "показывать" макет при создании ресурса - PullRequest
3 голосов
/ 02 декабря 2011

У меня есть 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?

Ответы [ 3 ]

3 голосов
/ 02 января 2012

Мне удалось решить эту проблему, создав шаблон Rabl на comments/create.rabl.

object @comment

extends "comments/show"

И это все, что она написала. Rails ищет представление create.rabl, которое принимает один объект и просто отображает поля, определенные в comments/show.rabl.

Благодарю Мартина Харригана за напоминание, что у меня все еще открыт вопрос!

0 голосов
/ 18 марта 2014

В Rails4 вы можете указать шаблон:

def create
  respond_with @comment, status: :created, template: 'comments/show'
end
0 голосов
/ 30 июля 2012

Вы можете использовать, чтобы оставаться сухим:

render :show, :status => :created
...