xfyuan
xfyuan A Chinese software engineer living and working in Chengdu. I love creating the future in digital worlds, big and small.

Rails render path 继承关系一例

Rails render path 继承关系一例

近两天在 Rails 的开发中,突然发现了关于 render path 的一个之前未曾注意到的有趣地方。

代码中有一个父类 Controller,假设为 FruitsController;两个子类 Controller,假设为 ApplesControllerOrangesController

ApplesController#showOrangesController#show 的 View 中,大部分都是一样的,已经抽出来了一个 partial 模版,假设为 _fruit_content.erb。这样两个 Controller#show 的模版内,都会有这么一行:

1
render 'path/to/fruit_content'

那么 _fruit_content.erb 放到哪个 path 比较合适呢?当然 shared 目录是一个选择,但由于一些其他原因已经排除了,所以不做考虑。

如果放在

1
views/apples

下,那么 OrangesController#show 的模版内那一行 render 就必须指明 _fruit_content.erb 完整path:

1
render 'apples/fruit_content'

反之亦然。无论哪种都感觉不太符合 Rails “Convension over Configration” 的原则。

最后无意中却发现 Rails 竟然“原来对此早有准备的”~

答案很简单。

由于 ApplesControllerOrangesController 都继承于 FruitsController,所以我们只需把 _fruit_content.erb 放在

1
views/fruits

然后无论是 ApplesController#show 还是 OrangesController#show 的模版内那一行 render 都只需写为:

1
render 'fruit_content'

即可。

搞定收工。

comments powered by Disqus