Rails 3路由 - 什么是最佳实践?

时间:2010-05-27 09:27:57

标签: ruby-on-rails ruby-on-rails-3

我正在尝试使用Rails,我偶然发现了我的路由问题。

我有一个名为“Account”(单数)的控制器,它应该处理当前登录用户的各种设置。

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 个答案:

答案 0 :(得分:3)

要获取要在视图中使用的命名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

两者的作用相同,这只是一个选择问题。但我确实认为第一种方法是最干净的,即使它不是DRY。

答案 1 :(得分:0)

您还可以将其定义为资源上的集合:

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

当然,这也定义了默认的CRUD操作。我目前只使用其中两个用于我的非实际模型控制器,但我不认为/预计额外路线会有任何问题。