2015-11-16 4 views
0

Я пытаюсь сделать что-то невероятно простое в Rails 5.0.0.alpha: отобразить HTML-файл, который не находится в каталоге public.Rails отображает HTML-файл за пределами 'public'

Мой маршрут таков:

get '/api/docs' => 'static#documentation'

И мой StaticController выглядит следующим образом:

class StaticController < ApplicationController 
    def documentation 
     render 'api/documentation/index.html' 
    end 
end 

index.html файл я хочу сделать находится в app/views/api/documentation/index.html.

Всякий раз, когда я загружаю /api/docs в браузер, все, что я получаю, это ответ 200 OK с пустой страницей, что означает, что ничего не отображается.

Я попробовал почти каждый вариант render:

  • render 'app/views/api/documentation/index.html'
  • render 'views/api/documentation/index.html'
  • render 'api/documentation/index.html'
  • render '/documentation/index.html'
  • render 'app/views/api/documentation/index'
  • render 'views/api/documentation/index'
  • render 'api/documentation/index'
  • render '/documentation/index'
  • render file: 'app/views/api/documentation/index'
  • render file: 'views/api/documentation/index'
  • render file: 'api/documentation/index'
  • render file: '/documentation/index'

и т.д. Что мне не хватает?

Edit: выход сервера:

Started GET "/api/docs" for 198.167.XXX.XX at 2015-11-16 02:07:48 +0000 
Processing by StaticController#documentation as HTML 
Completed 200 OK in 1ms (Views: 0.2ms | ActiveRecord: 0.0ms) 
+0

Что выходной сервер? – Jason

+0

@ Джейсон См. Мое редактирование. Как я уже сказал в этом вопросе, это ответ «200 OK», никаких ошибок ... –

+0

Я видел, что вы упомянули об этом в вопросе, но, глядя на полный вывод сервера, мы видим, что «Rendered api/documentation/index. html' отсутствует. Кроме того, один способ, который вы можете установить, если найти файл, - это переименовать его и посмотреть, есть ли у вас ошибка «Шаблон отсутствует». Если это не вызывает ошибку, возможно, у вас есть проблема с пути. Если вы получите эту ошибку при переименовании файла, тогда он действительно нашел файл. В этом случае попробуйте 'puts render_to_string ('api/documentation/index.html')' и посмотреть, отображается ли содержимое файла на выходе сервера. – Jason

ответ

0

Я думаю, что это из-за главного шаблона приложения. Вы можете установить в 2 пути, 1. Проверьте, если <%= yield %> тег в application.html.erb

Или отключить его с помощью

layout false 

в вашем StaticController

+0

Вы знаете, что я совсем забыл упомянуть, что я использую функциональность Rail's API (это означает, что ни один из этих файлов рендеринга на уровне приложения не был сгенерирован при создании приложения). Вы, безусловно, правы. Я могу обслуживать статические файлы (если я помещал их в '/ public'), но я хотел поместить этот файл за контроллер для проверки подлинности. Поскольку у меня нет файла макета на уровне приложения, вызов 'render' абсолютно бесполезен. Я буду копаться в этом и вернуться к вам. Спасибо за предложение! –

+0

Хорошо, вы можете попробовать это. Я предполагаю, что он ищет файл erb. так что мы можем упомянуть его статический файл. render: file => 'api/documentation/index.html' –

Смежные вопросы