Как мне указать «: layout => false» в Rails в response_with?

У меня есть эта настройка:

class UsersController < InheritedResources::Base
  respond_to :html, :js, :xml, :json

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

Теперь я пытаюсь сделать так, еслиparams[:format] =~ /(js|json)/, render :layout => false, :text => @users.to_json, Как мне это сделать сrespond_with или жеrespond_to а унаследованные_ресурсы?

 Trip06 окт. 2010 г., 23:30
Просто догадки, но возможноrender false ?

Ответы на вопрос(7)

Или чтобы вам не приходилось жестко кодировать ответы для каждого формата в каждом действии.

Если у вас нет макетов для каких-либо действий в этом контроллере, было бы лучше сделать:

class UsersController < InheritedResources::Base
  respond_to :html, :js, :xml, :json
  layout false

  def index
    @users = User.all
    respond_with(@users)
  end
end
 d3vkit26 февр. 2013 г., 02:41
В rails 3 используйте layout: false - nil загрузит макет по умолчанию. Увидеть:stackoverflow.com/a/11355276/398696

Мне нравится решение @ anthony, но у меня ничего не вышло ...

respond_with(@users) do |format|
  format.html { render :layout => !request.xhr? }
end

ps: публикация «ответа» вместо комментария, потому что форматирование комментариев stackoverflow и «return key == submit» приводят в бешенство!

Я только что узнал это:

Даже если это JSON, Rails все еще ищет макет. Таким образом, единственный макет, который он находит, в нашем случае, этоapplication.html.

Решение: создайте макет JSON.

Так, например, если вы поставите пустойapplication.json.erb с одним= yield Внутри, рядом с вашим HTML, макет HTML улучшен JSON. Вы даже можете использовать это, чтобы окружить ваш JSON метаданными или подобными вещами.

<%# app/views/layouts/application.json.erb %>

<%= yield %>

Никаких других параметров не требуется, он работает автоматически!

Протестировано только в Rails 4

 emptywalls22 сент. 2014 г., 06:43
Работает для меня в Rails 4. Просто и понятно.
 songyy23 янв. 2016 г., 18:52
Я только что проверил в Rails 4.2. Если вы назовете свой файл макетаapplication.html.slim, это не будет рассматриваться как файл макета для JSON; кто бы ни, если вы называете свой файл макета какapplication.slim.. Затем этобыло бы рассматривается как файл макета для JSON. (замените slim на erb, сделайте то же самое).
 lifecoder30 мар. 2014 г., 21:49
Протестировано в Rails 3, работает просто отлично. Хотя это и не ответ на заданный вопрос, это все же ответ на вопрос, который многие из нас имеют в виду по-настоящему.
class UsersController < InheritedResources::Base
  layout -> (controller) { controller.request.xhr? ? false : 'application' }
end

Предполагая, что вам нужен JSON для Ajax-запроса

class UsersController < InheritedResources::Base
  respond_to :html, :js, :xml, :json

  def index
    @users = User.all
    respond_with(@users, :layout => !request.xhr? )
  end
end

Это кажется самым чистым решением для меня.

Решение Вопроса

Что-то вроде:

def index
  @users = User.all
  respond_with @users do |format|
    format.json { render :layout => false, :text => @users.to_json }
  end
end

Вы должны установить это в своем шоу-действии.

def show
  render :layout => !request.xhr?
end

:)

Ваш ответ на вопрос