我正在尝试asset_path
通过 javascript 在我的 Ruby on Rails 4 应用程序的开发过程中使用。在我的 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。