路由文件中的“map.resource”到底做了什么?

时间:2010-08-28 07:29:36

标签: ruby-on-rails routing

举一个最简单的例子:

map.resource:account

1)与定义所有名称路线有多么不同 - 例如:

  

:map.new_account“new_account”,:controller =>“activity”,:action =>“new”

2)如何在资源定义中设置其他路由?例如,假设还有一种资源方法

  

:map.brand_new_action“brand_new_action”,:controller =>“activity”,:action =>“brand_new_action”

我们只是在下面添加它吗?但这似乎打败了资源的重点

2 个答案:

答案 0 :(得分:3)

手动定义所有路线有何不同?

它没有什么不同,因为它更方便。为什么要手动定义所有路线,这可能相当繁琐。因此,常见的CRUD操作会自动映射,下面是使用联系人控制器的示例:

map.resources :contacts

... or in Rails 3 ...

resources :contacts

http_verb - action - route
GET    - index   - /contacts
GET    - show    - /contacts/5
GET    - new     - /contacts/new
POST   - create  - /contacts/create
GET    - edit    - /contacts/5/edit
PUT    - update  - /contacts/5
DELETE - destroy - /contacts/5

这些通常被称为“7个Restful Actions”,但是如果需要,您可以添加自己的自定义路线(尽管强烈建议您尽可能使用7)。

如何添加其他资源/路线?

添加其他路线很容易。首先,您要确定您是在使用集合还是特定成员,然后还要考虑该操作是创建还是更新某些内容。对于要使用PUT的更新操作,创建POST,销毁使用DELETE,其他任何东西都可能是GET。

map.resources :contacts, :collection => { :new_this_month => :get },
                         :member => { :make_featured_person => :put }

... or in Rails 3 ...

resources :contacts do
  collection do
    get 'new_this_month'
  end

  member do
    put 'make_featured_person'
  end
end

http_verb - action - route
GET    - new_this_month        - /contacts/new_this_month
PUT    - make_featured_person  - /contacts/5/make_featured_person

大多数情况下,7个Restful Actions足够多,但在某些情况下你需要自定义路线。这就是Rails处理最常见情况并使您能够处理特殊情况的原因。

答案 1 :(得分:2)

资源路由简单提供了生成控制器中最常见路由的简便方法,即创建,读取,更新和删除CRUD。这允许定制,因为这可能是人们需要的。

要向资源规范添加其他路由:

map.resources :accounts, :collection => {:administrate => :get}, :member => {:activate => :put}

:collection results in something like:

/accounts/administrate

:member likewise:

/accounts/123/activate

http://guides.rubyonrails.org/routing.html#restful-routing-the-rails-default