保华的Rails学习笔记

弄清resource嵌套、namespace和member do的相互关系

问题
最近在做作业时,经常被resource嵌套、namespace以及member绊倒,弄不清它们之间到底是什么关系,以至于经常出现一些这方面的bug
重要性
弄清楚它们之间的关系,不但少出现关于调用action的相应path方面的bug,而且在写代码调用时,可以很快的写出相应action的path地址,而且总不能一直看着老师的教程才能写出action的相应path
思路及方法
1)新建立了一个rails档案
rails new ceshi
2)修改routes.rb文件
3)修改routes.rb后,运行rake routes观察相应产生的path地址

测试routes.rb时,我把教程上边经常出现的包括resource嵌套、namesapce以及member do的大概都测试了一下并作了简单修改,测试结果如下:

1、namesapce与resource一起用

Rails.application.routes.draw do
  namespace :jobs do
    resources :resumes
  end
end

可以产生的path是类似:
jobs_resumes
edit_jobs_resume
new_jobs_resume

但是不能产生类似new_job,edit_job等path,也不会产生类似edit_resume new_resume这样的path,namesapce是个命名空间,它产生的全部path看下图

2、resource嵌套

Rails.application.routes.draw do
  resources :jobs do
    resources :resumes
  end
end

可以产生的path有:
1)关于外层jobs的,例如:
- new_job
- edit_job

2)关于jobs里边的resumes的,例如:
- new_job_resume
- edit_job_resume

它产生的全部path看下图

3、namespace、resources与member一起用

Rails.application.routes.draw do

  namespace :admin do
      resources :jobs do
        member do
          post :publish
          post :hide
        end
      end
    end

end

1)可以产生的path有:
edit_admin_job
new_admin_job

2)还产生了两个member do里边的两个action的path:
publish_admin_job
hide_admin_job

4、resources与member一起用

Rails.application.routes.draw do
resources :groups do
    member do
      post :join
      post :quit
    end
  end
end

可以产生的path有:
1)外层groups的相应path,例如:
new_group
edit_group

2)产生了member do里边的两个action的相应path,即:
join_group
quit_group


除了7个默认的action外,有新的自定义的action时,就要用这个resources的member do了,这样才能产生这些新action的相应path