因此,当前我正在尝试制作一个应用程序,其中每个用户都有自己的待办事项列表和索引页面,这意味着每个人都可以访问用户页面以查看用户的每个任务。
我使用devise并创建了一个带有用户参考的简单模型:
rails g model Todo title:string completed:boolean user:references
当然在todo.rb / user.rb中添加了Emirates_to / has_many
现在,由于我希望每个待办事项索引页面都与用户待办事项相关联,因此我创建了一个嵌套资源,如下所示:
resources :users do
resources :todos
end
访问
http://localhost:3000/users/1/todos/
可以正常工作并显示索引页面。
出现问题:当我将/ users /之后的数字更改为例如2时,即使没有id为2的用户,它仍然可以工作。
任何想法我如何使它动态化,以便/ users /之后的整数表示user_id?以为我做得对,但我想我错过了一些东西。提前致谢!
编辑:
根据要求,TodosController.rb:
class TodosController < ApplicationController
def index
@todos = Todo.all
end
def new
end
def show
@todo = Todo.find(params[:id])
@user = @todo.user
end
def update
end
def edit
end
end
答案 0 :(得分:1)
让我们看看您的索引操作:
def index
@todos = Todo.all
end
它始终显示所有待办事项,因为它对用户一无所知。 应该是:
def index
@user = User.find(params[:user_id])
@todos = @user.todos
end
在显示操作中,您首先必须找到用户,在这种情况下,您可以确定所请求的待办事项属于所请求的用户
def show
@user = User.find(params[:user_id])
@todo = @user.todos.find(params[:id])
end
您可以将@user = User.find(params[:user_id])
重构到before_action回调中,因为您将在所有操作中使用它