2016-01-09 113 views
0

我得到这个错误:走走在控制器未知行动“

“行动‘创造’无法找到ObjectController”

我知道这应该是显而易见的,但我失去了一些东西,这是我的控制器:

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' 
+0

这里有一些奇怪的事情发生,但最明显的是这里的拼写错误:'资源:objets'(应该是'resources:objects')。另外,按照惯例,您应该始终以复数形式命名您的控制器。即'ObjectsController'而不是'ObjectController'。然后使用下面的勘误表。 – dwenzel

+0

感谢您的回答,我发现了这个问题,但我会记住您的建议;) –

+0

您需要指向'objects/index'(复数对象) –

回答

0

好吧,一个愚蠢的,其实我有两个目录,我没有修改正确的,对不起...

0

你可能娃NT放弃这些路线和尝试一些简单的像

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

然后使用

$ rake routes 

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

+0

rake routes给我正确的行为,但是当我去/对象/创建我仍然有这个错误 –

0

你的路由可以大大提高:

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

-

下,“标准”的方式来实现你要寻找的是使用new行动; IE不是“创建”操作。如果你想用create路径名(而不是new),你就可以在path_names argument来定义它:

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

要理解为什么你应该使用new代替create,你应该看看了resourceful routing,以及它如何与object orientated programming有关。


最后,你的控制器应复数命名为:

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

虽然你可以叫它任何你喜欢的,Rails的默认plural控制器名称,singular型号名称。