在控制器中销毁重定向 Rails 浅层路由

Destroy redirect in Controller Rails Shallow Routing

我有一个简单的 rails 模型项目,其中有很多任务。我正在尝试学习适当的浅层路线,但在大多数教程中,当涉及到控制器任务时,解释得很少。我的问题是除 Destroy 部分外,我的所有东西都在工作。

路线

resources :projects, shallow: true do
   resources :tasks do
end

型号

class Project < ApplicationRecord
  has_many :tasks, dependent: :destroy
end

class Project < ApplicationRecord
  belongs_to :projects
end

然后我有通过脚手架生成的简单控制器。我在任务 table.

中添加了对项目的引用

我已经按照 Digital Oceans 指南了解如何嵌套资源,但我找不到另外涵盖控制器和视图的综合浅层教程。

所以我有所有其他功能,如显示、编辑、更新等。我不确定我是如何让它们工作的,但通过改变单词顺序和添加片段,它起作用了……万岁。但是现在我无法让它返回到任务索引(它有项目 ID)URL,在我点击销毁后它会是 projects/id/tasks/。我在 TasksController#edit 中不断收到错误 ActiveRecord::RecordNotFound 并且 rails 将这部分突出显示为我的错误问题:

def set_task
   @task = Task.find(params[:id])
end

我知道这是脚手架默认生成的,我之前添加的唯一部分是之前的操作 get_project 和这个:

def get_project
  @project = Project.find(params[:project_id])
end

任何想法都会很有帮助。

检查您是否在点击 edit 路线时传递了 project_id 参数。如果与编辑路由无关,可以为编辑路由添加条件跳过before_action

before_action :get_project, except: [:edit]

好的,所以我发现我的解决方案更多地考虑它实际上是一个重定向问题,并且控制器没有在销毁路​​由中从子控制器获取父 ID。因此,在越来越多地摆弄之后,我找到了更改销毁重定向的答案:

redirect_to project_scene_headings_path(@project)

redirect_to project_scene_headings_path(@scene_heading.project_id)