Ruby on rails 设计中的嵌套资源
我是rails新手,我想了解一些关于我的路线和正确的路线逻辑的建议。我正在开发一个非常简单的应用程序,用户可以在其中发布列表。用户(设计模型)有许多列表,列表属于某个用户。我的列表表中有一个user\u id:integer。当用户成功登录后,我希望他们在相应的路由页面上看到他们的列表。我创建了嵌套管线,如下所示:Ruby on rails 设计中的嵌套资源,ruby-on-rails,ruby,devise,nested-routes,Ruby On Rails,Ruby,Devise,Nested Routes,我是rails新手,我想了解一些关于我的路线和正确的路线逻辑的建议。我正在开发一个非常简单的应用程序,用户可以在其中发布列表。用户(设计模型)有许多列表,列表属于某个用户。我的列表表中有一个user\u id:integer。当用户成功登录后,我希望他们在相应的路由页面上看到他们的列表。我创建了嵌套管线,如下所示: devise_for :users, :paths => 'users' resource :users do resource :lists end 这是我的rake
devise_for :users, :paths => 'users'
resource :users do
resource :lists
end
这是我的rake路由的输出
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
users_lists POST /users/lists(.:format) lists#create
new_users_lists GET /users/lists/new(.:format) lists#new
edit_users_lists GET /users/lists/edit(.:format) lists#edit
GET /users/lists(.:format) lists#show
PATCH /users/lists(.:format) lists#update
PUT /users/lists(.:format) lists#update
DELETE /users/lists(.:format) lists#destroy
users POST /users(.:format) users#create
new_users GET /users/new(.:format) users#new
edit_users GET /users/edit(.:format) users#edit
GET /users(.:format) users#show
PATCH /users(.:format) users#update
PUT /users(.:format) users#update
DELETE /users(.:format) users#destroy
root GET / static_pages#home
这也是确保用户只能访问其列表的一个步骤。您可能希望将列表资源多元化,并使用户资源单一化:
resource :user do
resources :lists
end
对于第二部分,只需根据您需要的当前用户加载列表
@lists = current_user.lists
我认为你可以这样做:
# config/routes.rb
Rails.application.routes.draw do
# ...
resources :lists
end
# app/controllers/lists_controller.rb
class ListsController < ApplicationController
before_action :authenticate_user!
def index
@lists = current_user.lists
end
end
资源:用户可以
资源:清单
结束
关键是多元化
是指向该部分文档的链接
我会使用像cancancan或pundit这样的授权来控制用户可以看到或看不到的列表。
希望有帮助 您应该使用资源
方法而不是资源
:
resources :users do
resources :lists
end
看看这个,它包含了很好的例子和解释
为此:
这也是确保用户只能访问其列表的一个步骤
您可以使用以下选项之一:当前用户
:
current_user.lists
UPD:但是我认为创建列表作为一个单独的(不是嵌套的)资源更容易。大概是这样的:
# config/routes.rb
Rails.application.routes.draw do
# ...
resources :lists
end
# app/controllers/lists_controller.rb
class ListsController < ApplicationController
before_action :authenticate_user!
def index
@lists = current_user.lists
end
end
#config/routes.rb
Rails.application.routes.draw do
# ...
资源:清单
结束
#app/controllers/list_controller.rb
类ListsController
因此,在/lists
路径中,一些用户只能访问自己的列表。就这样。谢谢,这正是我需要的。快速跟进。如何在我的控制器列表中引用当前用户的:id。我需要一些特殊的语法,因为设计?我在用户/列表(索引)上检测到循环依赖项错误@Michael Brooks,您也可以访问控制器中的当前用户。只需执行当前_user.id