【问题标题】:Rails namespaced routes - Windows vs LinuxRails 命名空间路由 - Windows 与 Linux
【发布时间】:2011-07-21 16:05:36
【问题描述】:

我正在开发一个在 Windows Server 2003 上的 Rails 2.3.11 下运行的旧客户端应用程序。所有应用程序都依赖于一个简单的包罗万象的路由(见鬼!):

map.connect ':controller/:action/:id'

我有一些嵌套模块,在 Windows (prod) 和 Mac OS (dev) 上一切正常。

url_for(:controller=>'/settings/users', :action=>:index)
#=> Settings::Users#index

最近我从 Mac OS 更改为 Ubuntu 11.04。一切正常,除了这些嵌套路由。

url_for(:controller=>'/settings/users', :action=>:index)
#=> Settings#users

有人知道发生了什么吗?为什么只有 Linux 才有这个问题?

【问题讨论】:

  • :controller => '/settings/users' 是做什么的?也许它把它作为一个绝对的文件系统路径,
  • 没有。这假设使用操作“index”映射到控制器“Settings::User”。我的问题是,在我的 Linux 系统上,它映射到控制器“设置”和操作“用户”......所以不,它不会将其作为绝对文件系统路径。

标签: ruby-on-rails ruby


【解决方案1】:

如果它以这种特定方式影响路由,则不太可能是特定于操作系统的问题。你有什么理由在控制器名称前加上/?命名路线非常具体,避免了大部分混乱,所以很遗憾你没有它们。

两个系统上的 gem 版本可能略有不同,可能非常微妙。

【讨论】:

  • 宝石没问题(不幸的是......),我检查了。有和没有前缀'/'的问题都是一样的。还是谢谢。
  • 从长远来看,rake routes 的输出是否相同?你真的没有太多的路由在那里。您也可以尝试使用assert_routing 功能测试来尝试验证行为。
【解决方案2】:

试试这样的

 map.namespace :settigns do |settings|
   settings.connect '/:controller/:action/:id
 end

或使用 map.namespace 的东西,这就是我在模块中做控制器的方式,除了它的不同类型的路由

 map.namespace :admin do |admin|
   admin.resources :reports, :only => [:new, :create ]
   admin.connect 'reports/generate/:action/*rest', :controller => 'reports'
   admin.resources :approval, :controller => 'approval', :only => [ :index, :create ] 
   admin.resource :home, :controller => 'home' 
 end

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2016-07-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多