2016-01-09 3 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

Здесь есть несколько странных вещей, но наиболее вопиющей является ошибка правописания здесь: 'resources: objets' (должно быть' resources: objects'). Кроме того, по соглашению, вы всегда должны указывать свои контроллеры во множественном числе. то есть 'ObjectsController' вместо' ObjectController'. И затем используйте предложение об ошибках ниже. – dwenzel

+0

Спасибо за ваш ответ, я нашел проблему, но я буду помнить о ваших советах;) –

+0

Вам нужно указать «объекты/индекс» (множественное число на объекты) –

ответ

0

Хорошо, что один был тупой, на самом деле у меня было два каталога, и я не изменял правильный, извините за это ...

0

Вы, наверное, уа нт лома этих маршрутов и попробовать что-нибудь попроще, как

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

Затем используйте

$ rake routes 

Чтобы убедиться, что ваши маршруты, как должно быть. Вам понадобится POST-маршрут/объекты для создания нового объекта и т. Д.

+0

rake routes дает мне правильное поведение, но когда Я перехожу к/objects/create, у меня все еще есть эта ошибка –

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 названия модели.

Смежные вопросы