How to render file in Rails 5 API?

自作多情 提交于 2019-12-01 03:41:11

If I change the parent class to ActionController::Base everything works as expected. But I don't want to inherit the bloat of full class, I need slim API version.

Yes, if you serve index from ApplicationController, changing its base class would affect all other controllers. This is not good. But what if you had a specialized controller to serve this page?

class StaticPagesController < ActionController::Base
  def index
    render file: 'public/index.html'
  end
end

This way, you have only one "bloated" controller and the others remain slim and fast.

You could do

render text: File.read(Rails.root.join('public', 'index.html')), layout: false

This should work, and allow you to keep inheriting from ActionController::API--

class ApplicationController < ActionController::API
  def index
    respond_to do |format|
      format.html { render body: Rails.root.join('public/index.html').read }
    end
  end
end

The render logic changed for ActionController::API with Rails 5.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!