Rails: answer_to JSON и HTML

У меня есть контроллер "UserController", который должен отвечать на обычные и ajax-запросы http://localhost:3000/user/3,

Когда это нормальный запрос, я хочу сделать мой взгляд. Когда это AJAX-запрос, я хочу вернуть JSON.

Правильный подход, кажется, respond_to do |format| блок. Написание JSON легко, но как мне заставить его реагировать на HTML и просто отображать представление как обычно?

  def show
    @user = User.find(params[:id])
    respond_to do |format|
      format.html {
        render :show ????this seems unnecessary. Can it be eliminated??? 
      }
      format.json { 
        render json: @user
      }
    end
  end

3 ответа

Решение

Насколько мне известно, нет необходимости "отображать шоу" в format.html, он будет автоматически искать соответствующий вид действия для ex: show.html.erb для запроса html и show,js,erb для запроса JS.

так что это будет работать

respond_to do |format|

  format.html # show.html.erb
  format.json { render json: @user }

 end

Кроме того, вы можете проверить, является ли запрос ajax или нет, проверив request.xhr? он возвращает true, если запрос является ajax.

Да, вы можете изменить его на

respond_to do |format|
  format.html
  format.json { render json: @user }
end

Лучший способ сделать это, как сказал Амиткумар Джа, но если вам нужен простой и быстрый способ визуализации ваших объектов, вы также можете использовать этот "ярлык":

def index
  @users = User.all
  respond_to :html, :json, :xml
end

Или сделать respond_to работать для всех действий в контроллере с использованием response_with:

class UserController < ApplicationController
  respond_to :html, :json, :xml

  def index
    @users = User.all
    respond_with(@users)
  end
end

Начиная с версии Rails 4.2 вам нужно будет использовать gem responder чтобы иметь возможность использовать response_with.

Если вам нужно больше контроля и вы хотите иметь несколько действий, которые действуют по-другому, всегда используйте полный блок response_to. Вы можете прочитать больше здесь.

Другие вопросы по тегам