【问题标题】:How do I route to a batman.js (batman-rails) controller in a rails 4 application without overwriting all other routes?如何在不覆盖所有其他路由的情况下路由到 rails 4 应用程序中的 batman.js (batman-rails) 控制器?
【发布时间】:2014-11-28 11:45:25
【问题描述】:

我已经有一个想要保留的现有 Rails 应用程序,但我想使用 batman.js 开发它的一部分(1 个带有关联页面的控制器)。我能够成功地运行安装了 batman-rails 的旧 Rails 应用程序,但是当路由进入图片时开始出现问题。

我能够显示 batman-rails index.html 页面的唯一方法是将此行放入 routes.rb:

get "(*redirect_path)", to: "batman#index", constraints: lambda { |request| request.format == "text/html" }

然后在我的浏览器中输入 localhost:3000。然而,这使得无法从我的应用程序中查看任何其他页面,因为它们都显示为空白(例如 localhost:3000/store/index)

如果我简单地说:

get "batman/index"

在 routes.rb 中,当我转到 localhost:3000/batman/index 时,我得到的只是一个空白页面,但所有其他页面都可以正常工作。在控制台中,似乎 rails 在这两种情况下仍然发出相同的请求:

Started GET "/batman/index" for 127.0.0.1 at 2014-10-03 13:47:38 +0200
Processing by BatmanController#index as HTML
  Rendered layouts/batman.html.erb (8.1ms)
Completed 200 OK in 10ms (Views: 9.0ms | ActiveRecord: 0.0ms)

由于第一种形式的路由覆盖了所有其他重定向,因此它毫无价值,因为我希望能够按原样使用旧应用程序。如何在不覆盖所有其他路由的情况下路由到 batman-rails 控制器?

TL:DR 如何在 rails 4 应用程序中路由到 batman-rails 控制器而不覆盖所有其他路由?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 routes batman-rails


    【解决方案1】:

    我知道有 2 个不错的选择:

    1) 将 batman.js 包罗万象的路线放在您现有的路线之后。这将导致 Rails 正常为您现有的路由提供服务,然后在没有其他路由时回退到 batman.js only。例如:

    # routes.rb
    
    # normal Rails route
    resources :store do
      resources :items
      resources :orders 
    end
    
    # batman.js catch-all route 
    get "(*redirect_path)" # etc...
    

    2) batman.js 应用程序的命名空间。从应用程序的子路径提供 batman.js 应用程序。您还必须设置 Batman.config.pathToApp,它告诉 batman.js 生成相对于命名空间的路由。

    # routes.rb 
    
    # namespaced batman.js catch-all route 
    get "/batman_app/(*redirect_path)", to: "batman/index", constriants: lambda { |request| request.format == "text/html" }
    

    另外,告诉 batman.js 从这个命名空间进行操作

    # my_app.coffee
    Batman.config.pathToApp = "/batman_app"
    
    class @MyApp extends Batman.App 
      # ...
    

    【讨论】:

    • 非常感谢!这真的很有帮助。 batman.js 应用程序的命名空间创造了奇迹。现在完全不同的是,有没有一种简单的方法可以让蝙蝠侠应用程序加载我通常的布局而不是蝙蝠侠布局?我意识到在某处​​需要更改一些配置,但我就是找不到。
    猜你喜欢
    • 2011-02-01
    • 2016-07-12
    • 1970-01-01
    • 2014-05-28
    • 2018-06-14
    • 2011-09-12
    • 1970-01-01
    • 2014-03-30
    • 2017-12-11
    相关资源
    最近更新 更多