有关rails3路由的问题

时间:2012-02-10 09:50:46

标签: ruby-on-rails-3

我将我的应用升级到rails 3,我对某些路线感到有些困惑。资源丰富的很容易,但我如何为特定控制器中的所有操作设置通用规则。我试过这样的事情:

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

但那并没有奏效。似乎新格式是" controller#action",但是如何指定要变量的操作?

此外,除了使用命名路由或资源之外,是否可以使用简写表示法来命名特定控制器中的路由?

即。而不是:

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 :(得分:0)

您可以将操作用作这样的变量:

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

请注意,由于惯例,匹配的控制器名称再次为复数。

答案 1 :(得分:0)

看起来这与嵌套的ActiveResource对象上的持久字段设置为false有关:https://github.com/rails/rails/pull/3107