Ruby on rails 带有find和where的show方法中的Rails 5自定义查询

Ruby on rails 带有find和where的show方法中的Rails 5自定义查询,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,我为这个笨拙的问题道歉。我有一个索引方法,它将对象限制为当前用户,效果很好,但我仍然可以在show方法中访问对象 这将仅显示当前用户对象 def index @todo_lists = TodoList.where(user_id: current_user) end 不幸的是,如果您知道id,仍然允许访问对象 def show @todo_list = TodoList.find(params[:id]) end 我试图做的事情,但给出了未定义的方法,其中错误 def show

我为这个笨拙的问题道歉。我有一个索引方法,它将对象限制为
当前用户
,效果很好,但我仍然可以在show方法中访问对象

这将仅显示当前用户对象

def index
  @todo_lists = TodoList.where(user_id: current_user)
end
不幸的是,如果您知道id,仍然允许访问对象

def show
  @todo_list = TodoList.find(params[:id])
end
我试图做的事情,但给出了
未定义的方法,其中
错误

def show
  @todo_list = TodoList.find(params[:id]).where(user_id: current_user)
end
您应该“替换”当前查询。As find返回单个对象,该对象对应于所请求的模型/表。where将在模型中使用,并返回
ActiveRecord::Relation
的一个实例,这就是按id查找TodoList所需的内容

之后,您可以使用find,它将查找单个实体(一条记录),并将其作为模型实例返回

尝试:

请注意,如果当前_用户是user的一个实例,假设它有许多产品,您可以使用该关联获取所有产品,然后找到您需要的产品:

current_user.todo_lists.find(params[:id])
current_user.todo_lists.find(params[:id])