我将我的应用升级到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
这会自动创建命名路由吗?
答案 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