【问题标题】:Ruby on Rails 4 and usage of asset_pathRuby on Rails 4 和asset_path 的使用
【发布时间】:2013-07-30 15:24:47
【问题描述】:

我正在尝试通过 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 项目中引用模板文件?

正如我在下面的 cmets 中提到的,我想要实现的是从资产管道中检索模板,而不必去服务器获取它们。额外的往返没有任何意义,因为它们可以在页面加载时提供,以使应用程序在它们已经被缓存时被视为“更快”。这里的问题是你仍然需要定义一个 Rails 路由来匹配 Angular 的每一个路由,否则 Rails 将返回 404。

【问题讨论】:

  • 您可能应该在这里查看第一个答案:stackoverflow.com/questions/12116476/…
  • 这并不能真正解决模板 URL 遇到包罗万象的问题。我试图在这里避免服务器端处理。
  • 我基本上是在尝试避免使用 AJAX 来检索模板。资产管道中的所有内容都应该可用。到服务器的额外往返似乎没有意义,但如果 R​​ails 端没有路由,即使在 Angular 中指定了路由,也会返回 404。
  • 它完全回避了使用包罗万象的路由的问题,而是选择创建一个控制器来处理模板的交付。我不熟悉 Angular,所以我不确定模板的具体需求。

标签: javascript ruby-on-rails ruby angularjs rails-routing


【解决方案1】:

asset_path 不会加载资产目录中的所有文件。它适用于图像。
如果要添加其他文件,则需要为它们添加解析器。

由于您尝试使用资产管道中的 Angular 模板,您应该看看 angular-rails-templates

它会自动将您的模板编译成 javascript,并使它们可用于 angular。
然后,您可以像往常一样使用它们。一旦您部署到生产环境中,您的所有模板都将包含在您的单个 application.js 文件中。

【讨论】:

  • 这看起来不错,但我真的更喜欢使用背后有更大社区的东西。不确定这是否得到维护,文档相当薄。必须有一个明确的解决方案。
  • @randombits 你应该仔细看看这个库的作者;你最近可能在 StackOverflow 上碰到过他。至于它是否得到维护——你可以很容易地查看提交历史,发现它只是一个 2 周前的项目。 ;)
  • 我知道这个答案的作者创建了这个库。这仍然没有改变我最初的想法。
  • 使用或不使用,这取决于你。我回答的要点是,您不能像您一样只使用asset_path。虽然添加解析器并不复杂,但它不仅仅是 5 行。
  • Damien - 您目前是否有一个使用简单的“hello world”模板解决方案的示例正在开发中?
猜你喜欢
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 2015-11-14
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
相关资源
最近更新 更多