Rails 3 маршрутизация - что лучше? - PullRequest
1 голос
/ 27 мая 2010

Я пробую Rails, и наткнулся на проблему с моей маршрутизацией.

У меня есть контроллер с именем «Аккаунт» (в единственном числе), который должен обрабатывать различные настройки для текущего пользователя.

class AccountController < ApplicationController
    def index
    end

    def settings
    end

    def email_settings
    end
end

Как бы я правильно настроил маршруты для этого? На данный момент у меня есть:

match 'account(/:action)', :to => 'account', :as => 'account'

Это, однако, не приводит к автоматическому созданию таких методов, как account_settings_path, а только account_path

Есть ли лучшая практика делать это? Помните, что контроллер Account не представляет контроллер для ActiveModel.

Если это на самом деле лучшая практика, как бы я генерировал ссылки в своих представлениях для действий? url_to :controller => :account, :action => :email_settings?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 28 мая 2010

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

match 'account', :to => 'account#index'
match 'account/settings', :to => 'account#settings'
match 'account/email_settings', :to => 'account#email_settings'

Или

scope :account, :path => 'account', :name_prefix => :account do
  match '', :to => :index, :as => :index
  match 'settings', :to => :settings
  match 'email_settings', :to => :email_settings
end

Либо работает одинаково, это просто вопрос выбора. Но я думаю, что первый метод самый чистый, даже если он не такой СУХОЙ.

0 голосов
/ 25 июня 2010

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

  resources :login do
    collection { get :reminder, :test }
  end

Конечно, это также определяет действия CRUD по умолчанию. В настоящее время я использую только два из них для моего контроллера, не являющегося реальной моделью, но я не думаю / не ожидаю, что будут какие-то проблемы с дополнительными маршрутами.

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