在控制器操作中从公共服务文件

时间:2015-02-12 17:42:51

标签: ruby-on-rails-4 asset-pipeline

在我的项目中,我们有一个单页面应用程序,我们的构建过程将应用程序编译为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提供资产?

3 个答案:

答案 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路由器。