我正在尝试为嵌套在“用户”模型中的“页面”模型设置路由。只有“页面”需要足智多谋。(用户 has_many pages)
这是我原来的做法:
resources :users, path: '', only: [] do
resources :pages, path: ''
end
以上对我来说很好。我得到的路线是:
user_pages GET /:user_id(.:format) pages#index
POST /:user_id(.:format) pages#create
new_user_pages GET /:user_id/new(.:format) pages#new
edit_user_pages GET /:user_id/:id/edit(.:format) pages#edit
user_pages GET /:user_id/:id(.:format) pages#show
PUT /:user_id/:id(.:format) pages#update
DELETE /:user_id/:id(.:format) pages#destroy
这对我来说很有意义,因为/john-doe/page1
会是user_pages_path(@user, @user.pages.first)
.
但是,new_user_pages 没有意义,因为用户只能为自己/她自己创建一个页面。因此,每个用户都应该访问/new,而不是“/:user_id/new”。此外,如果用户访问另一个用户的 ":another_user_id/new" 会发生什么?(做 new_pages_path 和 '/new' 而不是new_user_pages_path
and会更有意义/:user_id/new
)。
我尝试执行上述路由的另一种方法:
我还意识到,由于 ":users" 不需要足智多谋,因此可以以更短的方式完成上述操作:
resources :pages, path => :user_id
但是,这导致路径中没有“用户”:
pages GET /:user_id(.:format) pages#index
POST /:user_id(.:format) pages#create
new_pages GET /:user_id/new(.:format) pages#new
edit_pages GET /:user_id/:id/edit(.:format) pages#edit
pages GET /:user_id/:id(.:format) pages#show
PUT /:user_id/:id(.:format) pages#update
DELETE /:user_id/:id(.:format) pages#destroy
这样做的“rails”方式是什么?另外,我应该从资源中删除“新”并单独定义它吗?
另外,使用范围或命名空间是否有意义?
谢谢,尼克