在控制器中销毁重定向 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)
我有一个简单的 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)