Вопросы о маршрутах rails3 - PullRequest
       0

Вопросы о маршрутах rails3

0 голосов
/ 10 февраля 2012

Я обновляю свое приложение до rails 3, и меня немного смущают некоторые маршруты.Находчивые достаточно просты, но как я могу установить общее правило для всех действий в конкретном контроллере.Я попробовал что-то вроде этого:

get 'custom/:action/' => {:controller => :custom}

Но это не сработало.Кажется, новый формат - «контроллер # действие», но как я могу указать, чтобы действие было переменным?

Кроме того, кроме использования именованных маршрутов или ресурсов, возможно ли сделать краткую запись для именования маршрутов вконкретный контроллер?

т.е. вместо:

get '/tasks', :controller => :home, :action => :tasks, :as => 'tasks_home'
get '/accounts', :controller => :home, :action => :accounts, :as => 'accounts_home'

можно ли сделать что-то немного чище, например:

controller => :home do
  get :tasks
  get :accounts
end

И это автоматически создастименованные маршруты?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2012

Похоже, это связано с тем, что для постоянных полей установлено значение false для вложенных объектов ActiveResource: https://github.com/rails/rails/pull/3107

0 голосов
/ 10 февраля 2012

Вы можете использовать действие как переменную:

resource :custom do
   match ':action'
end

Это сгенерирует

                   /custom/:action(.:format) customs#:action
     custom POST   /custom(.:format)         customs#create
 new_custom GET    /custom/new(.:format)     customs#new
edit_custom GET    /custom/edit(.:format)    customs#edit
            GET    /custom(.:format)         customs#show
            PUT    /custom(.:format)         customs#update
            DELETE /custom(.:format)         customs#destroy

Таким образом, он будет обрабатывать ваши действия как переменные URL-адреса и также добавит некоторые действия CRUD по умолчанию.

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

Ответ на второй вопрос практически идентичен первому, используйте ресурс:

resource :home do
    get :tasks
    get :accounts
end

генерирует:

   tasks_home GET    /home/tasks(.:format)     homes#tasks
accounts_home GET    /home/accounts(.:format)  homes#accounts
         home POST   /home(.:format)           homes#create
     new_home GET    /home/new(.:format)       homes#new
    edit_home GET    /home/edit(.:format)      homes#edit
              GET    /home(.:format)           homes#show
              PUT    /home(.:format)           homes#update
              DELETE /home(.:format)           homes#destroy

Обратите внимание, что совпадающие имена контроллеров снова во множественном числе из-за соглашения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...