Только макет рендеринга Rails?
Просто попробуйте простое приложение для рельсов, в основном для API-интерфейса с JSON, приложение с большим клиентским интерфейсом. Так что я хочу сделать, это только визуализировать макет, а код JavaScript обрабатывать URL-адрес и сделать запрос ajax для получения json-данных. Кажется, что работает следующее:
respond_to do |format|
format.html { render :nothing => true, :layout => true }
end
Однако, поскольку ничего не предназначено для того, чтобы ничего не делать, это кажется неправильным. Есть ли более правильный способ просто сделать макет? Обратите внимание, что мой макет не имеет выхода.
Ответы
Ответ 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'
отобразит '' (без макета)