将Rails路由映射到Ember路由

时间:2014-03-13 17:41:12

标签: javascript ruby-on-rails ember.js routes

注意:这与Ember Routes and Rails Routes

不同

我有一个单页的Ember应用程序,它位于Rails堆栈之上。无视Rails的需要 - 这是必需的。

我的Ember应用程序视图位于/ember_app。我想将正常的资源路线映射到Ember路线,如下所示:

GET /home     ~> /ember_app/#/home
GET /account  ~> /ember_app/#/account
GET /login    ~> /ember_app/#/login

最好的方法是什么?一个想法是:

  1. Rails routes.rb将所有请求发送到单个操作ember_app#index以及包含Ember路由名称的参数(与redirect_route: "account"一样)。注意homeaccountlogin在Rails中不需要任何数据,只想在Ember中重定向到该路由。
  2. ember_app#index操作将route参数存储到实例变量@redirect_route
  3. ember_app.html.erb中,@redirect_route被插值并存储在JavaScript变量EmberApp.redirectRoute
  4. 在Ember的application_view.js(或适当的地方),我们会相应地使用EmberApp.redirectRoute在客户端重定向。
  5. 这种方法听起来合理吗?我们还可以为每个路由执行Rails操作,该路由只是呈现index操作并传递route参数。但是,似乎可以(应该)以编程方式将Rails路由映射到Ember路由。我们不希望在Rails routes.rb和Ember router.js中复制它们。那里有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了这个问题,但听起来你需要的只是将所有内容映射到你的ember应用程序然后让ember进行路由。

使用通配符路由应该可以解决问题。只需将所有内容映射到该控制器,您的应用程序将被加载,然后Ember路由器将决定下一步该做什么。

get '(*anything)', to: 'ember_app#index'

这就是我设置的方式,除了我不在root上做,我的看起来更像:

get 'application_name/(*anything)', to: 'ember_app#index'

希望这有帮助