获得'Unknown action in controller'



我收到这个错误:

"找不到ObjectController"的操作"create"

我知道这应该是显而易见的,但我错过了一些东西,那就是我的控制器:

class ObjectController < ApplicationController
  def index
  end
  def create
  end
end

这就是我的路线:

Rails.application.routes.draw do
  get 'object/index'
  get 'object/create'
  match ':controller(/:action(/:id))', :via => :get
  resources :objets
  # The priority is based upon order of creation: first created -> highest priority.
  # See how all your routes lay out with "rake routes".
  # You can have the root of your site routed with "root"
  root 'object#index'

你可能想放弃那些路线,尝试一些更简单的东西,比如

resources :objects, only: [:get, :create, :show]

然后使用

$ rake routes

确保你的路由是应该的。你会想要一个到/objects的POST路由来创建一个新的对象等等。

好吧,这个很愚蠢,实际上我有两个目录,但我没有修改正确的目录,很抱歉。。。

您的路线可以大大改进:

#config/routes.rb
Rails.application.routes.draw do
  root 'objects#index'
  resources :objects

--

接下来,实现您想要的目标的"标准"方法是使用new操作;IE不是"创建"操作。如果您想使用create路径名(而不是new),您可以在path_names参数中定义它:

#config/routes
resources :objects, path_names: { new: "create", create: "create" } #-> url.com/objects/create

为了理解为什么应该使用new而不是create,您应该查找资源路由,以及它与面向对象编程的关系。


最后,您的控制器应以复数形式命名:

#app/controllers/objects_controller.rb
class ObjectsController < ApplicationController
  ...
end

虽然您可以随意调用它,但Rails默认为plural控制器名称和singular模型名称。

最新更新