我试图通过javascript在Ruby on Rails 4应用程序的开发过程中使用asset_path
。在我的javascript中,我使用类似的东西引用HTML文件:
<%= asset_path('templates/login/index.html.erb') %>"
该文件实际驻留在$RAILS_ROOT/app/assets/templates/login/index.html.erb
当我的javascript试图抓住这个文件时,它正在捕捉我放在一起的'catchall'路线,因为我的前端是AngularJS,它正在处理应用程序的“路由”。这是日志:
Started GET "/templates/login/index.html.erb" for 127.0.0.1 at 2013-07-30 11:20:43 -0400
Processing by HomeController#index as
Parameters: {"a"=>"templates/login/index.html"}
Rendered home/index.html.erb within layouts/application (0.0ms)
Completed 200 OK in 12ms (Views: 12.3ms | ActiveRecord: 0.0ms)
我的routes.rb如下所示:
App::Application.routes.draw do
devise_for :users
root :to => 'home#index'
namespace :api do
end
get '*a', to: 'home#index'
end
避免此问题的最佳方法是什么?如何在我的javascript / angular项目中引用模板文件?
正如我在下面的评论中提到的,我想要实现的是从资产管道中检索模板,而不必去服务器抓取它们。额外的往返行程没有意义,因为它们可以在页面加载时提供,以使应用程序在已经缓存时被视为“更快”。这里的问题是你仍然需要定义一个Rails路由来匹配Angular方面的每个路由,否则Rails将返回404.
答案 0 :(得分:4)
asset_path
不会加载assets目录中的所有文件。它适用于图像
如果要添加其他文件,则需要为它们添加解析器。
你要做的就是使用资产管道中的角度模板,你应该看一下angular-rails-templates。
它会自动将您的模板编译成javascript,并使它们可用于角度
然后,您可以像平常一样使用它们。部署到生产环境后,所有模板都将包含在您的单个application.js
文件中。