shallow nesting 是用来把路径(也就是我们的网址)缩短的技巧。
在 Rails 的 model 内常常会有 belongs_to、has_many 的关联。
假设我现在要做一个笔记留言的路径,因为 note has_many :comments、comment belongs_to :note,
所以假如我要删除2号笔记里面的3号留言,我的路径会是 /notes/2/comments/3。
不过因为留言的 id 不会跟别的留言重复的关系,其实就算不用去2号笔记内我也可以直接观看、编辑、删除3号留言,
为了让路径看起来比较不罗唆,这时候 shallow nesting 这个技巧就可以派上用场了!
从下图可以看到 index、new、create 的路径没有 id
这是因为 index 是要显示2号笔记的所有留言、new 是新建一个留言所需要的页面、而 create 是新建一个留言,
这三个都不需要有特定的 id。
而其他像是 show 要显示3号留言、edit 是编辑3号留言所需要的页面、update 要更新3号留言、destroy 要删除3号留言,都是需要特定的 id 才能够操作。
resources :notes do
resources :comments, only: [:index, :new, :create]
end
resources :comments, only: [:show, :edit, :update, :destroy]
范例1会让 index、new、create 的路径维持 /notes/2/comments
而 show、edit、update、destroy 的路径变成 /comments/3
如此一来可以让路径看起来简洁一点。
resources :notes do
resources :comments, shallow: true
end
如果使用 Rails 内建的 shallow nesting,就可以有这个效果。
像是范例2在 resources :comments 後面加上 shallow: true 就可以直接变成范例1的效果,
是不是很方便呢!
参考:
[1]Rails Routing from the Outside In
前言 很感谢各位进来观看本人的铁人赛,会想写关於JavaScript主题主要是学习了一段时间,透过参...
前言 上集我们介绍到 Enum 基础用法,今天将来讲解其它用法。 字串列举(String enum)...
在写程序时,我们可能需要重复执行某些程序,总不可能每行程序一直复制贴上,这时候就会用到我们的回圈(l...
1. pip Python 原生套件管理工具 venv 虚拟环境 install python -m...
呃,首先呢~ 敝人小弟在下我今天仔细的思考了一下,决定这次还是再来一篇『中场休息』科普文,等到明天再...