文章目录
  1. 1. 目标:
  2. 2. 步骤:
    1. 2.1. Step 01:关于resources
    2. 2.2. Step 02:关于namespace
    3. 2.3. Step 03:关于collection
    4. 2.4. Step 05:总结
  3. 3. 更多ROR【豆知识】:

目标:

掌握resources 、namespace、member 和 collection的使用区别。

步骤:

Step 01:关于resources

RESTful风格的路由动词默认有7个(分别为:index, show, create, new, edit, update, destroy)。

复数型资源
例如:rails101中

routes.rb
1
2
resources :groups
resources :posts

这里使用resources :groups一行代码,这是复数资源,即可产生同名controller即groups_controller.rb中7个action对应的路由(分别为:index, show, create, new, edit, update, destroy)。

此外还有单数型资源,如下所示

routes.rb
1
resource :post

与复数资源相比,特别之处在于没有index action了,所有的URL Helper也皆为单数形式,显示出来的网址也是单数。但是Singular resource的文件命名仍为复数,例如posts_controller.rb

指定Controller
虽然resource默认采用同名的controller,但是我们也可以修改,例如

routes.rb
1
2
3
resources :projects do
resources :tasks, :controller => "project_tasks"
end

Step 02:关于namespace

例如:rails101中

routes.rb
1
2
3
4
namespace :account do
resources :groups
resources :posts
end

这里使用的是

:account```,是因为account只是一个命名文件夹,里面是没有数据的,用来区分匿名group资源和用户group资源。
1
2
3
4
5
6
7
如此controller会是```Account::GroupsController```,网址如```/account/groups```,而URL Helper如```account_groups_path```这样的形式。
在Namespace下也可以设定它的首页,例如:
```ruby routes.rb
namespace :admin do
root "projects#index"
end

就样连http://localhost:3000/admin/就会使用ProjectsController index action了。

实例参考:https://github.com/Kerzzi/jfshop/blob/master/config/routes.rb

Step 03:关于collection

除了惯例中的七个Actions外,如果你需要自定群集的Action,可以这样设定:

routes.rb
1
2
3
4
5
6
7
8
9
10
resources :products do
collection do
get :sold
post :on_offer
end
# 或
get :sold, :on => :collection
post :on_offer, :on => :collection
end

如此便会有

Helper,产生出如```products/sold```和```products/on_offer```这样的网址。可以看到生成的网址不带id,且collection(即products)是复数,加s。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
### Step 04:关于member
如果需要自定对特定元素的Action,例:job-listing中:
```ruby routes.rb
namespace :admin do
resources :jobs do
member do
post :publish
post :hide
end
# 或
post :publish, :on => :member
post :hide, :on => :member
resources :resumes
end
end

post送出的join、publish它生成的网址上都是带有id的,且member(即job)是单数,不加s的。
如此会有publish_job_path(@job)这个URL Helper,产生出如jobs/1/publish这样的网址。

Step 05:总结

  • member 是对单个实体进行操作,创建路由格式是: /:controller/:id/:your_method,命名的路由是用id生成且是单数。
  • collection 是对实体集合进行操作,创建路由格式是: /:controller/:your_method ,网址不带id,是复数。
  • resource是直接生成一组资源所需要的7个action。

更多ROR【豆知识】:

更多ROR【豆知识】请前往:https://github.com/Kerzzi/ruby_notes/tree/master/04_ROR_beans

文章目录
  1. 1. 目标:
  2. 2. 步骤:
    1. 2.1. Step 01:关于resources
    2. 2.2. Step 02:关于namespace
    3. 2.3. Step 03:关于collection
    4. 2.4. Step 05:总结
  3. 3. 更多ROR【豆知识】: