在我的项目中,我们有一个单页面应用程序,我们的构建过程将应用程序编译为public/index.html
的单个静态文件。
单页面应用程序负责处理应用中的所有路由,因此无论您是访问site.com
还是site.com/foo/bar/action
还是site.com/☃
,我都希望Rails应用程序能够投放public/index.html
我有这条路线:
match '*path', to: 'foo#index', via: :all
在FooController中:
class FooController < ApplicationController
def index
render 'index.html', layout: false
end
end
这并不像我希望的那样有效;我收到错误Missing template foo/index.html, application/index.html
作为Rails控制器操作的一部分,是否可以从public
提供资产?
答案 0 :(得分:4)
在Rails 5中,我通过
来实现这一点render file: "public/examplename.html", layout: false
答案 1 :(得分:0)
这比我想象的要容易得多。
我改变了:
render 'index.html', layout: false
到
render 'public/index.html', layout: false
一切都按预期工作。
答案 2 :(得分:0)
这似乎已经改变了。我试图暂时为我的应用程序的管理部分呈现静态文件,这将是一个通过API与rails通信的VueJS SPA。我必须做以下事情:
的routes.rb
match '*path', :to => 'console#index', :constraints => { :subdomain=>'console'}, :via=>:all
console_controller.rb
class ConsoleController < ApplicationController
def index
render :file=>'/public/console/index.html', :layout=>false
end
end
所以在路径上使用:file而不是没有参数 - 因为否则Rails 5试图将其视为普通视图模板。
通过该路径匹配和子域,这似乎运行良好,因为所有路由都将传递到VueJS路由器。