我正在更新一个Rails应用程序以使用Ember.js。在集成Ember之前,应用程序中存在的那些视图仍然可以正常工作,但我也添加了几个新视图。这些视图具有所有必要的ember部分(模板、控制器等),以及所有Rails部分,不包括视图文件。
如果用户通过单击内部链接访问这些视图,则这些视图可以正常工作。然而,如果用户重新加载页面或手动输入URL,那么我会收到以下错误:
ActionView::MissingTemplate at /contribute
Missing template pages/contribute, application/contribute with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :coffee]}. Searched in:
* "/home/sites/whistlr/app/views"
* "/home/.rvm/gems/ruby-2.0.0-p0@whistlr/gems/devise-3.0.0/app/views"
这显然是因为我没有视图文件。问题是,这绝对有必要吗?有没有办法告诉Rails只加载Ember视图?理想情况下,我只需要在对话完成后删除所有旧的Rails视图文件。
这不是必要的,但您需要设置rails routes.rb
,以具有一个catch-all路由,该路由也可以像显示ember应用程序及其html的索引页面一样进行渲染。
namespace :api do
# resources go here
end
root :to 'home#index'
match "/*path" => 'home#index'
注意:你想为你的项目自定义这个路径模式,否则404也会发送到这里。
不需要创建单独的视图。诀窍是在应用程序控制器中捕获异常,然后强制它呈现布局:
class ApplicationController < ActionController::Base
rescue_from ActionView::MissingTemplate do |exception|
render "/layouts/application"
end
end