2013-02-12 2 views
0

Мои рельсы приложение имеет один CustomerSelectionController, с двумя действиями:Как создать действие контроллера рельсов?

индекс: который показывает форму, где пользователь может ввести информацию о клиенте и выбрать: который просто отображает статические страницы.

class CustomerSelectionController < ApplicationController 
    def index 
    end 

    def select 
    end 
end 

Я создал запись в моем routes.rb файле:

resources :customer_selection 

и форму в индексном выглядит следующим образом:

<h1>Customer Selection</h1> 

<%= form_tag("customer_selection/select", :method => "get") do %> 
    <%= submit_tag("Select") %> 
<% end %> 

однако, когда я нажимаю на Select в браузере, все, что я получаю:

Неизвестное действие

Не удалось найти действие 'show' для CustomerSelectionController

Я не уверен, почему он пытается выполнить действие под названием show? Я нигде не указывал ни одного упоминания.

+0

http://guides.rubyonrails.org/routing.html – gabrielhilal

+0

Вы наметили customer_selection/select для этого метода? – TheDude

ответ

1

Я не уверен, почему он пытается выполнить действие под названием show? Я нигде не указывал ни одного упоминания.

Да, у вас есть. Вот что делает resources. Он определяет семь маршрутов RESTful по умолчанию: index, show, new, create, edit, update и destroy. Когда вы направляетесь в /customer_selection/select, маршрут, который соответствует «/ customer_action /: id», или маршрут «показать». Rails создает экземпляр вашего контроллера и пытается вызвать действие «показать» на нем, передавая идентификатор «select».

Если вы хотите добавить маршрут в дополнение к тем, что вам нужно явно определить его, и вы должны также четко указать, какие маршруты вы хотите, если вы не хотите, чтобы все семь:

resources :customer_selection, only: %w(index) do 
    collection { get :select } 
    # or 
    # get :select, on: :collection 
end 

Так как вы так мало маршрутов, вы можете просто определить их без использования resources:

get "/customer_selection" => "customer_selection#index" 
get "/customer_select/select" 

Обратите внимание, что во втором маршруте, то "customer_select#select" подразумевается. На маршруте с двумя сегментами Rails по умолчанию будет «/: controller /: action», если вы не укажете контроллер/действие.

+0

Могу ли я просто отбросить строку ресурсов, и разрешить переход по конфедерации? – spierepf

+0

Нет, вам все равно нужно определить маршрут. У вас нет * * использовать 'resources', но см. Мой обновленный ответ. – meagar

+0

Хорошо, где я могу получить краткое объяснение этого блока кода? – spierepf

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