【问题标题】:The action 'show' could not be found for EntryLevelsController?找不到 EntryLevelsController 的“显示”操作?
【发布时间】:2013-04-17 07:22:27
【问题描述】:

我面临一个奇怪的错误“AbstractController::ActionNotFound(无法为 EntryLevelsController 找到动作 'show')” 我没有定义“显示”动作,因为我不需要它。相反,我在资源 entry_levels 的集合中定义了自定义路由,如下所示:

resources :entry_levels do
  collection do
    get 'create_entry_level'
    post 'create_entry_level'
    get 'edit_entry_levell'
    post 'edit_entry_level'
    get 'update_entry_level'
    post 'update_entry_level'
    get 'delete_entry_level'
    post 'delete_entry_level'
    get 'entry_level_cancel'
    post 'entry_level_cancel'
    get 'change_priority'
    post 'create_entry_level'
  end
end

奇怪的是,rails 为 index、show、create、delete、update 和 edit 操作生成 url,就好像我在我的 routes.rb 文件中的某处定义了一个“资源:entry_levels”,但事实并非如此。我不知道为什么有关显示操作的错误不断弹出。

我的 rake 路线如下所示:

create_entry_level_entry_levels GET    /entry_levels/create_entry_level                                                              entry_levels#create_entry_level
                                                         POST   /entry_levels/create_entry_level                                                         entry_levels#create_entry_level
                      edit_entry_levell_entry_levels GET    /entry_levels/edit_entry_levell                                                           entry_levels#edit_entry_levell
                       edit_entry_level_entry_levels POST   /entry_levels/edit_entry_level                                                            entry_levels#edit_entry_level
                     update_entry_level_entry_levels GET    /entry_levels/update_entry_level                                                          entry_levels#update_entry_level
                                                         POST   /entry_levels/update_entry_level                                                          entry_levels#update_entry_level
                     delete_entry_level_entry_levels GET    /entry_levels/delete_entry_level                                                         entry_levels#delete_entry_level
                                                         POST   /entry_levels/delete_entry_level                                                          entry_levels#delete_entry_level
                     entry_level_cancel_entry_levels GET    /entry_levels/entry_level_cancel                                                         entry_levels#entry_level_cancel
                                                         POST   /entry_levels/entry_level_cancel                                                        entry_levels#entry_level_cancel
                          change_priority_entry_levels GET    /entry_levels/change_priority                                                              entry_levels#change_priority
                                                         POST   /entry_levels/create_entry_level                                                          entry_levels#create_entry_level
                                          entry_levels GET    /entry_levels                                                                              entry_levels#index
                                                         POST   /entry_levels                                                                              entry_levels#create
                                       new_entry_level GET    /entry_levels/new                                                                          entry_levels#new
                                      edit_entry_level GET    /entry_levels/:id/edit                                                                     entry_levels#edit
                                           entry_level GET    /entry_levels/:id                                                                           entry_levels#show
                                                         PUT    /entry_levels/:id                                                                           entry_levels#update
                                                         DELETE /entry_levels/:id                                                                          entry_levels#destroy

【问题讨论】:

  • 何时收到此错误?我的意思是在哪个网址上。
  • @maximus,当我从下拉选择框中选择课程时调用 entry_levels 控制器中的操作时会弹出错误。使用 ajax

标签: ruby-on-rails-3.2 routes


【解决方案1】:

你的设置有点不典型。这里有一些提示。

resources :entry_levels do
  # restful actions are automatically included, that is 
  # :index, :show, :new, :create, :edit, :update and :destroy

  put 'change_priority', on: :member # see the generated route and helpers with `rake routes`. A PUT request states that you are updating an existing resource.
end

很高兴知道您可以通过运行$ rake routes 来检查您的设置生成了哪些路由。

【讨论】:

  • 好的,但这是否意味着我应该在 'resources :entry_levels' 上方编写自定义路由?我还认为“成员做”是针对嵌套对象的?我已经在问题中发布了我的 rake 路线。谢谢,我真的很感激。
  • Rails guides on Routing 是一本优秀的读物。我的观点是,您可能不需要您提供的 non-restful 自定义路由,而是可以使用标准的 restful 路由来进行此类标准操作。
  • 当然,我必须阅读有关路由的内容,因为我已经有一段时间感到痛苦了。那么你会如何放置路线呢?
【解决方案2】:

我知道这是旧的,但它出现在我的搜索之一,所以我想添加到可能的答案。

当我有一个没有相应获取的帖子时,我会收到该错误。发生这种情况时,我要么将帖子定义为 get(如果它以这种方式工作),要么在 routes.rb 中创建一个匹配条目,以在帖子作为 get 进入时将用户发送到根页面(例如,如果用户已注销):

 match "entry_levels/create_entry_level" => "home#index", via: :get

但是,在这种情况下,问题似乎是您将 create_entry_level 定义为帖子两次。从来没有这样做过,但可能会搞砸你。您忘记将 create_entry_level 更改为“change_priority”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    相关资源
    最近更新 更多