Ruby on rails 使用Ember.js时是否需要构建Rails视图?

Ruby on rails 使用Ember.js时是否需要构建Rails视图?,ruby-on-rails,view,ember.js,Ruby On Rails,View,Ember.js,我正在更新Rails应用程序以利用Ember.js。那些在集成ember之前存在于应用程序中的视图仍然可以正常工作,但我还添加了几个新视图。这些视图包含所有必需的ember部件(模板、控制器等)以及所有Rails部件,不包括视图文件 如果用户通过单击内部链接访问这些视图,则这些视图可以正常工作。但是,如果用户重新加载页面或手动输入URL,则会出现以下错误: ActionView::MissingTemplate at /contribute Missing template pages/cont

我正在更新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只加载余烬视图?理想情况下,对话结束后,我会删除所有旧的Rails视图文件。

这不是必需的,但您需要设置Rails
routes.rb
以获得一个与显示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
class ApplicationController
您的问题更多的是布线,而不是视图。默认情况下,Ember路由器将其路径放在URL锚中,方式如下:
http://example.com/rails_path#/ember_path
当Rails路由器在URL
路径上运行时。请共享你的routes.rb和App.Router的片段,以便我们知道路径是什么。我正在使用
Whistlr.Router.reopen location:“history”
,它去掉了hashmark。你认为这可能会影响到这一点吗?这非常有效,尽管只有在我不需要通过Rails控制器获取数据的情况下。例如,如果我转到“/organizations”,Rails控制器通常会通过json发送@organizations。使用这种方法,我不会得到json,可能是因为rails路由没有指向rails控制器。也许我还遗漏了什么?对,在此之前,您仍然需要定义
资源。例如,使用
/api
命名空间。请参阅我的编辑。在参考资料的情况下,似乎仍然需要创建Rails视图?除非您在视图中呈现json,否则否。
render:json
不需要视图。当用户通过外部链接重新加载页面/到达页面时,会出现此问题。在这些点上,我渲染html只是为了得到标题。余烬能够填充身体。问题是,即使我的
application.html
页面没有
yield
标记,Rails仍然像我需要这些页面的视图一样。必须有一种方法告诉Rails不要寻找视图。