Ruby on rails 两种资源之间的路线存在无法解释的差异
在Rails 4中,我为用户和组织定义了相同的路由:Ruby on rails 两种资源之间的路线存在无法解释的差异,ruby-on-rails,ruby-on-rails-4,routes,Ruby On Rails,Ruby On Rails 4,Routes,在Rails 4中,我为用户和组织定义了相同的路由: Rails.application.routes.draw do # Static pages root 'static_pages#home' get 'hello' => 'static_pages#hello' get 'partner' => 'static_pages#partner' # Message
Rails.application.routes.draw do
# Static pages
root 'static_pages#home'
get 'hello' => 'static_pages#hello'
get 'partner' => 'static_pages#partner'
# Messages contact form
get 'contact' => 'messages#new', as: 'contact'
post 'contact' => 'messages#create'
# Users
get 'signup' => 'users#new'
resources :users
get 'admins' => ‘users#index_adm'
get 'unactivated' => ‘users#index_unactivated'
# Organizations
resources :organizations
# Sessions (for remembering log in log out)
get 'login' => 'sessions#new'
post 'login' => 'sessions#create'
delete 'logout' => 'sessions#destroy'
# Account activation (sends email and uses edit method to change activation status)
resources :account_activations, only: [:edit]
# Password reset
resources :password_resets, only: [:new, :create, :edit, :update]
end
但是当我通过rake routes
检查时,路径/路由不同:
signup GET /signup(.:format) users#new
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_users GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
organizations GET /organizations(.:format) organizations#index
POST /organizations(.:format) organizations#create
new_organization GET /organizations/new(.:format) organizations#new
edit_organization GET /organizations/:id/edit(.:format) organizations#edit
GET /organizations/:id(.:format) organizations#show
PATCH /organizations/:id(.:format) organizations#update
PUT /organizations/:id(.:format) organizations#update
DELETE /organizations/:id(.:format) organizations#destroy
请特别注意用户的最后四行和组织的最后四行。这里,users#update PATCH
请求与“用户路径”相关,而organizations#update PATCH
请求与edit#u organization
路径相关。我希望组织路线与用户路线相同。我跟随Hartl的railstutorial.org建立的用户,我自己也加入了组织。当尝试更新组织的记录时,路由的差异会导致问题
我做了哪些不同的操作,使组织路径与用户路径不相似?修补和放置操作与
编辑组织
或编辑用户
路径无关。使用resources
rails为修改资源的操作生成路由[PUT,PATCH,DELETE]
去掉资源的单数名称(organization\u path
)
我相信您可能只是读取了
rake routes
的输出错误,或者只是输出错误。除非rails抱怨组织路径不存在。问题消失了。这可能是我工作的云程序的问题。重新启动我的浏览器后,问题突然消失了…能否显示完整的routes.rb文件?因此,组织路径似乎不存在,而用户路径确实存在。问题中添加了完整的routes文件。您运行的rails版本是什么?我刚刚在4.2.0上尝试了你的routes.rb文件,但无法重新创建该问题。下面是我对这些路由的输出:我正在运行Rails 4.2.1。您的输出确实是我希望的。但是,为什么用户和组织之间的输出不同,为什么在路由中,第一个“列”中没有“组织”,而有“用户”?它导致的问题是:当我提交一个组织的编辑表单时,它会产生错误:没有路由匹配[PATCH]“/organization.1”
。当我单击删除记录时,它会生成错误没有路由匹配[DELETE]“/organization.10”
。嗯,这很奇怪-您正确定义了路由。如果您将表单添加到问题中,并尝试从rails控制台($rails s
)运行app.organization\u path(id:1)
),可能会有所帮助。输出应为“/organizations/1”