Rails обнаруживает тип запроса в контроллере? - PullRequest
1 голос
/ 13 января 2012

У меня есть контроллер, который через html показывает профиль пользователя, через JSON показывает карту пользователя с информацией о профиле.

class UsersController < ApplicationController

  def show
    @user = User.where(:id => params[:id]).first

    return redirect_to "/" if @user.nil?

    respond_to do |format|
      format.html { render :layout => 'application' }
      format.json { render :json => @user.to_json }
    end
  end
end

Проблема в том, что когда пользователь не найден, он перенаправляет, что прекрасно работает через HTML, но вызывает ошибки с JSON. Есть ли чистый способ сделать перенаправление, только если это HTML-запрос? Какие правильные рельсы, чистый способ справиться с этим?

Спасибо

1 Ответ

4 голосов
/ 13 января 2012

Поставьте отметку в обработчике формата, если он применим не ко всем форматам.Или укажите путь, по которому вы перенаправляете, чтобы получить что-то значимое для формата JSON.

Перенаправление несколько неудобно для пользователя, не предоставляя никакой информации относительно причины сбоя запроса.перенаправление для всех форматов.

(вам не нужно указывать макет приложения, это по умолчанию.)

Разъяснение в ответ на комментарий (я думаю):

Блоки для каждого формата - это просто блоки.Они могут содержать произвольный код, например:

respond_to do |format|
  format.html { @user.nil? ? redirect_to "/" : render }
  format.json { render :json => @user.to_json }
end

Возможно, не самый чистый, отчасти потому, что я считаю, что это неправильный способ обработки с самого начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...