Только макет рендеринга Rails? - программирование
Подтвердить что ты не робот

Только макет рендеринга Rails?

Просто попробуйте простое приложение для рельсов, в основном для API-интерфейса с JSON, приложение с большим клиентским интерфейсом. Так что я хочу сделать, это только визуализировать макет, а код JavaScript обрабатывать URL-адрес и сделать запрос ajax для получения json-данных. Кажется, что работает следующее:

respond_to do |format|
  format.html { render :nothing => true, :layout => true }
end

Однако, поскольку ничего не предназначено для того, чтобы ничего не делать, это кажется неправильным. Есть ли более правильный способ просто сделать макет? Обратите внимание, что мой макет не имеет выхода.

4b9b3361

Ответ 1

Попробуйте, это даст ответ на файл с именем sample.html, который может быть статическим html файлом.

а также вы можете иметь этот файл в общем месте, чтобы вы могли загрузить его ко всем действиям

укажите свой статический контент на этой странице, и если вам нужна динамическая страница, вы можете также иметь страницу .erb

в вашем методе

def index
    @posts = Post.all

    respond_to do |format|
      format.html {render :file => "posts/sample"}
      format.json { render json: @posts }
    end
end

/post/sample.html

НТН

Ответ 2

Ну, это сработало для меня в Rails 4.0:

render :text => "", :layout => true

Ответ 3

render :file => "layout_file", :layout => false

Ответ 4

Мне нужно было что-то подобное - отобразить шаблон макета без частичного (с частичным обработкой клиентов).

rails 4.2.0

respond_to do |format|
  format.html { render text: nil, layout: true }
end

Ответ 5

Я считаю, что если ваше приложение просто извлекает JSON с сервера, формат должен быть json, а не html.

respond_to do |format|
  format.json @your_collection
end

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

Ответ 6

(Копирование комментария Василе для лучшей видимости.)

Для рельсов 5.1, чтобы отобразить макет, не требуя шаблона просмотра, вам нужно использовать

def index
  render html: '', layout: true
end

или с пользовательским макетом

def index
  render html: '', layout: 'mylayout'
end

Следующие действия не будут выполняться:

render text: '', layout: 'mylayout' даст вам сообщение об ошибке, потому что шаблон представления index.html.haml не существует.

render nothing: true, layout: 'mylayout' даст вам ошибку, потому что nothing:true устарел, а шаблон index не существует (однако это работает в rails 4.2)

render body: '', layout: 'mylayout' отобразит '' (без макета)

render plain: '', layout: 'mylayout' отобразит '' (без макета)