【问题标题】:Upgrading Rails 3.2 to 4.2.6, routes generates wrong pathnames for resources将 Rails 3.2 升级到 4.2.6,路由会为资源生成错误的路径名
【发布时间】:2016-04-13 20:40:43
【问题描述】:

我正在从 Rails 3.2 升级到 4.2.6,由于某种原因,一个模型突然发现它的 rails 生成的资源路径名全错了。所有其他模型的资源都运行良好。

routes.rb(注释掉所有其他路由以隔离故障模型)

Rails.application.routes.draw do
  resources :signups
end

rails 3.2 rake 路由输出(应该是什么样子)

signups     GET     /signups(.:format)          signups#index
            POST    /signups(.:format)          signups#create
new_signup  GET     /signups/new(.:format)      signups#new
edit_signup GET     /signups/:id/edit(.:format) signups#edit
signup      GET     /signups/:id(.:format)      signups#show
            PUT     /signups/:id(.:format)      signups#update
            DELETE  /signups/:id(.:format)      signups#destroy

rails 4.2.6 rake 路由输出

signups_index GET    /signups(.:format)          signups#index
              POST   /signups(.:format)          signups#create
  new_signups GET    /signups/new(.:format)      signups#new
 edit_signups GET    /signups/:id/edit(.:format) signups#edit
      signups GET    /signups/:id(.:format)      signups#show
              PATCH  /signups/:id(.:format)      signups#update
              PUT    /signups/:id(.:format)      signups#update
              DELETE /signups/:id(.:format)      signups#destroy

知道是什么原因导致这个模型的路径名发生了变化吗?

【问题讨论】:

  • 当您尝试访问这些路由时是否会抛出错误
  • 你读过rails源代码吗?
  • 我认为您的路由文件中还有其他内容,因为您的 rake 路由没有正常输出。你不应该有“signups_index”或“new_signups”。我会弄清楚的,因为“注册”作为一种需要任何特殊变形的资源并没有什么不寻常的。
  • 我怀疑如果你查看你的路线,你会发现你有'signups/index',这就是为什么你的路线名称是“signups_index”,而不是“signups”。路线名称的其他偏差可能也是如此。把你的全部路线贴在这里,我们可以看看。
  • 我在帖子中提到,我删除了除注册之外的所有其他路由以隔离它。

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4


【解决方案1】:

inflect.irregular('signup', 'signups') 添加到config/initializers/inflections.rb

【讨论】:

  • 你应该添加更多上下文,我不认为发帖人理解。
猜你喜欢
  • 2014-04-28
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多