rails 路由无法正确重定向

rails routes cannot redirect correctly

我的数据层次结构是 'Case' 有很多 'Categories' 有很多 'Tasks'

我遵循文档,资源的嵌套深度不应超过 1 层。因此,我使用 shallow 如下:

我的routes.rb

resources :cases do
    resources :categories, :shallow => true do
      resources :tasks, :shallow => true
  end
end

耙路

     category_tasks GET    /categories/:category_id/tasks(.:format)     tasks#index
                       POST   /categories/:category_id/tasks(.:format)     tasks#create
     new_category_task GET    /categories/:category_id/tasks/new(.:format) tasks#new
             edit_task GET    /tasks/:id/edit(.:format)                    tasks#edit
                  task GET    /tasks/:id(.:format)                         tasks#show
                       PATCH  /tasks/:id(.:format)                         tasks#update
                       PUT    /tasks/:id(.:format)                         tasks#update
                       DELETE /tasks/:id(.:format)                         tasks#destroy
       case_categories GET    /cases/:case_id/categories(.:format)         categories#index
                       POST   /cases/:case_id/categories(.:format)         categories#create
     new_case_category GET    /cases/:case_id/categories/new(.:format)     categories#new
         edit_category GET    /categories/:id/edit(.:format)               categories#edit
              category GET    /categories/:id(.:format)                    categories#show
                       PATCH  /categories/:id(.:format)                    categories#update
                       PUT    /categories/:id(.:format)                    categories#update
                       DELETE /categories/:id(.:format)                    categories#destroy
                 cases GET    /cases(.:format)                             cases#index
                       POST   /cases(.:format)                             cases#create
              new_case GET    /cases/new(.:format)                         cases#new
             edit_case GET    /cases/:id/edit(.:format)                    cases#edit
                  case GET    /cases/:id(.:format)                         cases#show
                       PATCH  /cases/:id(.:format)                         cases#update
                       PUT    /cases/:id(.:format)                         cases#update
                       DELETE /cases/:id(.:format)                         cases#destroy
                  root GET    /                                            cases#index

我已将类别视图放入 case/show。html.erb 以在这种情况下显示类别。

案例的 url#show 是 localhost:3000/cases/9

如果我想创建一个新类别,link 将是 localhost:3000/cases/9/categories/new

它适用于 redirect_to 个案例#show page with my categories#create action

def create
    @case = Case.find(params[:case_id])
    @category = Category.new(category_params)
    @category.case = @case
    @case.member = current_member

    if @category.save
      redirect_to case_path(@case)
    else
      render :new
    end
end

但是当我尝试编辑类别并更​​新它时

url 更改为 localhost:3000/categories/2/edit 我没有 case_id 了。

无法重定向回案例#显示页面 localhost:3000/cases/9

我尝试编写与创建操作类似的代码,如下所示

def update
   @case = Case.find(params[:case_id])
   @category = Category.find(params[:id])
   @category.case = @case

   if @category.update(category_params)
      redirect_to case_path(@case)
   else
      render :edit
   end
end

但是无法得到case_id和下面的错误信息

Couldn't find Case with 'id'=

如何在编辑和更新 'category' 后重定向到 localhost:3000/cases/9

shallow: true根据documentedit_category更改为浅路由。浅路由中没有父资源id。

您可以改用@case = @category.case。不需要 category_id 参数

由于您不想在编辑类别时更改大小写,请尝试以下方法。

def update
   @category = Category.find(params[:id])
   @case = @category.case

   if @category.update(category_params)
      redirect_to case_path(@case)
   else
      render :edit
   end
end