如何在 Rails 中正确使用管理部分中的 "link_to"

How to use "link_to" in an Admin section correctly in Rails

所以我有一个有管理部分的应用程序。管理部分有一个带有索引方法和视图索引的挑战控制器。

我还有一个独立于管理文件夹的挑战控制器。该控制器具有整个 CRUD。

每挑战belongs_to一个主题。管理部分中的控制器主题有一个索引方法和视图。不在管理部分的控制器主题具有整个 CRUD。

现在,在主题视图(不是管理部分)中,我可以做类似的事情:

<%= link_to "New Challenge".html_safe, new_subject_challenge_path(@subject) %>

我想在管理部分做同样的事情,但我真的不知道该怎么做。复制代码会引发错误:

No route matches {:action=>"new", :controller=>"challenges", :subject_id=>nil} missing required keys: [:subject_id]

但我希望我可以在没有其他路线的情况下做到这一点....

看起来应该很容易,但我真的不知道如何处理。任何帮助将不胜感激......我希望我能很好地解释自己。

管理路由与命名空间一起使用:

namespace :admin do
    resources :paths, only: [:index, :new, :create, :update, :edit]
    resources :users, only: [:index, :new, :create, :show, :edit, :update] 

结束

  resources :challenges, except: [:index, :destroy] do
    resources :solutions, only: [:create]
   end

resources :subjects

您正在创建的 link 指向需要主题 ID 的路由。在主题视图中它有效,因为 Rails 可以在您传递给路径助手的 @subject 中找到 subject_id

当您在管理视图中复制并尝试重新使用相同的 link 时,我预计 @subject 未分配,因此无法找到所需的 subject_id。为您的管理部分视图提供主题,它应该可以工作!

此外,如果您想更清楚地了解路由,Rails docs 非常棒。