我的 Rails 路由应该是什么样子才能与 pushState Ember.js 路由一起使用?

2024-04-24

简而言之...

当构建 Ember.js 应用程序以持久保存到 Rails 应用程序时,我应该如何处理 Rails 路由/视图?我想我只需要 Rails 来渲染 application.html.erb 布局,以便 Ember.js 应用程序初始化并处理路由/视图/模板。

Details:

具体来说,如果我访问本地主机:3000,在我的 Ember.js 应用程序有机会初始化之前,Rails 在projects控制器。它会抱怨缺少索引模板。我没有 index.html.erb 视图,因为我的 Ember.js 应用程序有一个视图/模板。

我应该为 Rails 应用程序创建空白视图吗?我的 Rails 控制器操作是否应该返回某些内容以阻止它渲染视图?或者我是否需要构建普通的 Rails 视图以与 Ember.js 应用程序视图/模板一起使用?

如果我创建一个空白的projects/index.html.erb并访问本地主机:3000,Rails 将渲染它,Ember.js 将初始化并处理路由。但是,如果我访问本地主机:3000/项目/新Rails 直接抱怨项目控制器中没有新的操作。我没有“新”行动projectsRails 端的控制器,因为我不需要它。我的 Ember.js 应用程序正在处理该视图/模板。

最终,我只是不确定将 Ember.js 与 Rails 应用程序一起使用的约定是什么。

感谢您的帮助并阅读到目前为止...

Edit:

我省略了我尝试使用 Ember.js 路由器的功能的细节历史。这会让我留下非 hashbang 的 URL。这就是为什么我在处理 Rails 竞争路由我的应用程序时遇到问题的原因之一。

Rails 应用布局:

<html> 
<body>   
  <section id="design-archive"></section>
</body>
</html>

Ember.js 应用程序:

@DA = Em.Application.create
  name: 'Design Archive'
  VERSION: '0.1'
  rootElement: '#design-archive'
  ApplicationController: Em.Controller.extend()
  ApplicationView: Em.View.extend
    templateName: 'application'

DA.initialize(DA.Router)

铁路路线:

DesignArchive::Application.routes.draw do
  resources :clients, :only => [:new, :create, :index, :show, :destroy]
  resources :projects, :only => [:new, :create, :index, :show, :destroy]

  root :to => 'projects#index'
end

Ember.js 路由:

DA.Router = Em.Router.create
  location: 'history'

  root: Em.Route.extend
    index: Em.Route.extend
      route: '/'
      redirectsTo: 'projects'

    # Actions
    doProjects: (router) ->
      router.transitionTo('projects')
    doProjectsNew: (router) ->
      router.transitionTo('newProject')

    # Routes
    projects: Em.Route.extend
      route: '/projects'
      index: Em.Route.extend
        router: '/'
      connectOutlets: (router) ->
        router.get('applicationController').connectOutlet('projects', DA.Project.find())
      showProject: Em.Route.transitionTo('project')

    project: Em.Route.extend
      route: '/projects/:project_id'
      connectOutlets: (router, project) ->
        router.get('applicationController').connectOutlet('project', project)
      projectsIndex: Em.Route.transitionTo('projects')

    newProject: Em.Route.extend
      route: '/projects/new'
      connectOutlets: (router) ->
        router.get('applicationController').connectOutlet('projectsNew')

导轨控制器:

class ProjectsController < ApplicationController
  def index
    @projects = Project.all

    respond_to do |format|
      format.html
      format.json { render json: @projects }
    end
  end
end

您可以拥有一个引导您的 Ember 应用程序的包罗万象的路线。

这是我的一个应用程序的一个简化示例:

App::Application.routes.draw do
  match "/login"   => "sessions#new",     :via => :get, :as => :login
  match "/login"   => "sessions#create",  :via => :post
  match "/logout"  => "sessions#destroy", :via => :post, :as  => :logout

  match "/attachments/:id" => "attachments#download"
  match "/avatars/:id"     => "avatars#show"

  root :to => 'pages#bootstrap'

  # anything not matched by the above should be served the bootstrap
  match "/*path" => "pages#bootstrap"
end

这有返回的缺点200成功而不是404当访问完全无效的 URL 时会出错,因为 Rails 应用程序对 Ember 应用程序的 URL 结构一无所知。

如果你想避免这种情况,你可以在路由中复制你的 Ember URL 结构,然后将所有有效的内容指向引导路由,而不是使用 catch-all。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的 Rails 路由应该是什么样子才能与 pushState Ember.js 路由一起使用? 的相关文章

  • 如何让我的导航栏出现在 Rails 应用程序的每个页面上?

    目前 我的导航栏位于我的index htm erb 文件中 目前仅在主页上显示 我想知道为了让导航栏出现在我的应用程序的每一页上 必须采取哪些必要步骤 我的导航栏的代码如下所示
  • 在初始化程序中重新加载命名空间常量

    今天遇到一个有趣的情况 我不确定如何解决 给定一个带有初始化器的 Rails 应用程序 file config initializers integrations rb Integrations CONFIGS key gt value f
  • 尽管我安装了 2.2.2,为什么我会收到错误“您的 Ruby 版本是 2.0.0,但您的 Gemfile 指定了 2.2.2”

    我正在使用 rbenv 但出现错误Your Ruby version is 2 0 0 but your Gemfile specified 2 2 2当我运行bundle install我的项目中的命令 奇怪的是 我实际上安装了 2 2
  • 测试驱动开发 - 我应该测试数据库列和索引吗?

    我是 TDD 新手 我发现shouldagem 能够测试数据库实体的列是否存在以及测试其索引 但是否有必要在我的测试套件中包含列和索引的测试 我是否需要担心在开发过程中可能会删除任何列和索引 不要测试数据库列 这只是测试实施 不要测试实现
  • Rails 资产 - 保留许可证注释

    如何防止 Uglifier 删除某些文件中的某些注释 我希望缩小和压缩代码 但我也希望许可注释保持不变 来自 uglifyJS 的文档 nc or no copyright 默认情况下 uglifyjs 将在生成的代码中保留初始评论标记 假
  • Rails:从视图内渲染视图(不是部分视图)

    我有一个对两者都有响应的控制器html and js The htmlview 渲染整个页面 包括页眉和页脚 而js仅替换 main 除了页眉和页脚之外 两种格式呈现相同的内容 我可以用三个文件获得这种效果 show html erb di
  • 为什么 .each 在我的 Rails 视图中完成后会重复数组? [复制]

    这个问题在这里已经有答案了 在我的 Rails 视图页面中 我有以下循环 它应该循环遍历我的 tag list 数组并打印每个标签 由于某种原因 它在打印每个单独的标签后会重复该数组 例如 这个数组有两个元素 ruby python 每个方
  • 调整回形针大小以适合矩形框

    我有一个矩形图像 例如 30x800 像素 如何用回形针缩放它以保留 100x100 像素图像的纵横比 并用边框填充空白区域 一个例子 http www imagemagick org Usage thumbnails pad extent
  • ruby 中的树结构,父子采用数组格式,没有 gem?

    我有一个数组 其中包含这样的项目列表 arr id gt 1 title gt A parent id gt nil id gt 2 title gt B parent id gt nil id gt 3 title gt A1 paren
  • 在轮询器内异步运行代码

    在我的 ruby 脚本中 我使用 celluloid zmq gem 我尝试在轮询器内异步运行评估响应 使用 async evaluate response socket read multipart 但是 如果我从循环中删除睡眠 不知何故
  • Rails 3 沙箱控制台

    在 Rails 2 中你可以运行 script console sandbox 这样您就可以使用生产数据而不会意外破坏任何东西 我似乎找不到 Rails 3 的等效命令 有人知道它是什么吗 很简单 输入 bundle exec rails
  • 遏制gem安装:捆绑安装失败,但正常gem安装有效[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions solve
  • ruby on Rails id 不保存

    我知道这违反了 ruby on Rails 约定 但我的这个表的 id 不需要自动递增 我是通过逻辑设置它的 但是 它不会保存到数据库 保存的所有内容都将保存为 id 的空值 def self up create table probes
  • 在 EmberJS 中获取父路由

    我正在制作一个可重用 有点多态 的评论小部件 我想要一个按钮 使我能够返回到父路由 例如 如果我位于 blog posts 1 comments 我希望该按钮将我带回 blog posts 1 我目前正在使用transitionToRout
  • 使用 prawnto_2 gem 加载图像时,RAILS_ROOT 不再有效

    我正在将我的应用程序从 Rails 3 0 升级到 Rails 3 1 我已经尽可能地将旧插件转为 gems 其中包括用这个漂亮闪亮的新插件替换旧的 prawnto 插件对虾 2 https github com forrest prawn
  • Rails 4 - 将地址保存为数据库中的一列

    我是 Rails 新手 正在开发一个简单的应用程序 我的 ERD 中有一个名为 Client 的模型 并且希望保存每个客户的地址 我最初的想法是将地址保存为单独的字段 即 rails g model Client address first
  • 2015 年重新审视 Ember Handling 401

    我可以在 Ember Ember Data 中找到大量询问 回答如何从 Rails 后端处理 401 的老问题 许多 如果不是全部的话 在这一点上似乎已经过时了 我已经尝试了我能找到的一切 Ember 数据处理 401 https stac
  • 从 Facebook 重定向 URL 中删除“#_=_”[重复]

    这个问题在这里已经有答案了 根据https developers facebook com blog post 552 https developers facebook com blog post 552 FB Graph API 现在附
  • 使用“回形针”gem 和 Ruby on Rails 3 时出现问题

    我在运行 Snow Leopard v1 6 5 的 MacO 上使用 Ruby on Rails 3 我想使用 回形针 gem 所以我将它包含在我的 Gemfile 中 如下所示 gem paperclip gt 2 3 然后 在终端中运
  • 如何在 RoR 中实施成就系统

    我正在尝试在我的 Ruby on Rails 应用程序中实现一个成就系统 但效果很差 我有一长串想要检查的成就 所有这些都是由各种控制器中的某些创建操作触发的 我的想法是我将拥有一个成就模型 其中包括控制器及其响应的操作 然后对创建进行之前

随机推荐

  • Ruby on Rails 3:Devise::LdapAdapter.get_ldap_param 未定义方法错误

    我在跑步 红宝石 1 9 3p0 轨道 3 1 1 设计1 4 9 Devise ldap authenticatable 0 4 10 我正在使用 Devise 通过 LDAP 服务器验证我的 Rails 应用程序 我使用用户名而不是电子
  • Is Type 和 Is Type(object, object) 抛出 TypeException

    我试图断言方法调用返回的对象属于以下类型List
  • EC2 t2.medium 可爆发信用“储蓄”计算

    我正在使用 T2 medium 实例 一天的三分之一的时间我都在做密集的统计计算 并计算出剩下的 2 3 的时间我将以每小时 24 小时的速度 赚取 学分 但这并没有发生 这是我这两天的使用情况 这是我的信用账户 直到昨天下午 6 点我已经
  • 在 Ruby 中模拟 int64 溢出

    我是一名资深程序员 但对 Ruby 还很陌生 我正在尝试移植一种名为 CheckRevision 的算法 用于在登录 Battle net 的在线游戏服务之前检查游戏文件的完整性 该算法使用给定的公式对文件进行 哈希 没有无聊的细节 而是不
  • 从 apache Spark 读取/写入 dynamo 数据库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有任何 Java 库支持从 apache Spark Mesos 读取 写入 dynamo
  • 获取同一 FK 日期差异的前一条记录

    我需要在一小时内插入同一客户的前 1 条记录 如果记录在一小时后插入 则不需要该记录 请参见下表 这只是数千条记录的样本 我正在使用 SQL Server 2005 替代文本 http img651 imageshack us img651
  • 如何在node.js中关闭数据库连接?

    当我关闭数据库连接时node js我收到这个错误 Cannot enqueue Query after invoking quit 这是我的code socket on adminConnect function email connect
  • Java 大型数据库插入

    我有一个数据库 需要在其中插入批量数据 一次大约 500k 条记录 我正在使用 derby 进行测试 发现这么多记录的插入时间约为 10 15 分钟 我正在用 Java 进行批量插入 这次看起来是否很慢 在普通笔记本电脑上工作 有没有办法加
  • 在 SQL Server 的 select 语句中使用带有 TOP 的变量,而不使其动态化 [重复]

    这个问题在这里已经有答案了 declare top int set top 5 select top top from tablename 是否可以 或者对这样的逻辑有什么想法 我不想使用动态查询 是的 在 SQL Server 2005
  • 避免 Firebase 可调用函数的 CORS 预检

    我有一个Firebase 可调用云函数 https firebase google com docs functions callable我在浏览器中的 javascript 应用程序中调用它 由于请求主机是 cloudfunctions
  • Spring自动装配参数化集合

    大家好 感谢您提前的帮助 我遇到一个问题 Spring 无法自动装配 ArrayBlockingQueue 类型的参数化成员变量 这是java代码 Controller public class SomeController Autowir
  • WPF 使用凭据启动浏览器

    我正在使用 WPF 和 C 我希望能够启动一个浏览器窗口 最有可能是 IE 并提供已知的凭据 以便基于 Windows 的应用程序可以处理从自身到外部浏览器的转换 而无需用户再次输入他 她的凭据 我确实知道如何启动浏览器 System Di
  • 仅在模块中加载 Yii Bootstrap

    我尝试仅在管理模块中加载 Yii Bootstrap 扩展 但它不起作用 我假设我需要预加载它或以某种方式启动它 谢谢 class AdminModule extends CWebModule public function init im
  • UIWebView 不断尝试加载但没有结果

    我正在尝试使用 UIWebView 连接到 wikiTravel 页面 这是我的代码 NSURL url NSURL URLWithString http wikitravel org en Beijing NSURLRequest req
  • 从命令行运行 Jupyter Notebook (.ipynb),就像它是 .py 文件一样

    我正在本地计算机上编写 Jupyter 笔记本 该笔记本最终将在远程服务器 运行 Ubuntu 上运行 每次我需要进行更改时 我都必须将笔记本导出为 py文件 然后从服务器的命令行调用它 我希望能够即时运行它 调用一个命令来获取当前的 ip
  • Gmail 的操作邮件程序配置

    我正在尝试将使用 Gmail SMTP 的电子邮件传送添加到我的应用程序中 我之前已经完成了 不太安全的应用程序 方式 但我不想在这个项目中使用此选项 我试图查看谷歌的文档或一些宝石以使其工作 但无济于事 每个人都只是发送一些代码 如下所示
  • 使背景图像与屏幕大小相同

    我希望背景图像填满屏幕 并且不担心失去宽高比 已经证实了一切 不要认为我错过了任何明显的事情 HTML phone margin auto height 737px width 654px background image url imgs
  • 比较sql server中两个字符串中的数字

    我有两个字符串作为 CountryLocationIDs 和 LocationIDs 其值 CountryLocationIDs 400 600 150 850 160 250 LocationIDs1 600 150 900 然后我需要另
  • 如何为特定用户选择最后一行?

    我有一个这样的表 requests id id user unix time 1 2353 1339412843 2 2353 1339412864 3 5462 1339412894 4 3422 1339412899 5 3422 13
  • 我的 Rails 路由应该是什么样子才能与 pushState Ember.js 路由一起使用?

    简而言之 当构建 Ember js 应用程序以持久保存到 Rails 应用程序时 我应该如何处理 Rails 路由 视图 我想我只需要 Rails 来渲染 application html erb 布局 以便 Ember js 应用程序初始