Yuv*_*rmi 53 ruby-on-rails dry partials
我将在哪里放置由多个模型共享的部分文件?我有一个名为的页面crop.html.erb用于一个模型 - Photo.现在我想将它用于另一个名为的模型User.
我可以复制并粘贴代码,但这不是很干,所以我想我会把它移到局部.
由于它是在两个模型之间共享的 - 我会在哪里放置它?
谢谢!
Joh*_*ley 59
Rails约定是将共享部分放入/app/views/shared.
eco*_*gic 48
更新
布局继承现在位于布局下的指南中,并且渲染 模板继承的工作方式类似.
Rails 3.1和以下版本实现模板继承,所以我认为现在共享部分的正确位置/app/views/application/,比如你在products#index你身边可以做到以下几点:
-# products#index
= render @products.presence || 'empty'
-# /app/views/application/_empty.html.haml
There are no items
Run Code Online (Sandbox Code Playgroud)
顺便说一句,application因为连接是控制器继承,所以这是假设ProductsController < ApplicationController
这样一来,如果你实现了/app/views/products/_empty.html.haml这个,上面是所有缺失部分的后备,我现在无法检查,但我认为即使是模板本身......
Mih*_*scu 24
TL; DR
Rails 3.1,Rails 4,Rails 5以及接下来的任何内容
app/views/application
Run Code Online (Sandbox Code Playgroud)
如果在控制器路径中找不到视图,引擎将自动搜索此路径.
Rails 3和之前的
app/views/shared
Run Code Online (Sandbox Code Playgroud)
引擎不会自动搜索此路径.
很长的故事
Rails 3(和先前版本)没有用于存储共享视图的默认位置.
的非官方约定是共享视图存储在应用程序/视图/共享.无论你最终存储它们,你都必须指定路径
# render app/views/shared/menu.html.erb
<%= render :partial => "shared/menu" %>
Run Code Online (Sandbox Code Playgroud)
这个建议由Agile Web Development with Rails推广.
Rails 3.1引入了存储共享视图的官方标准:
app/views/application由于此标准,引擎现在会自动在app/views/application中查找模板.因此,您不必再使用完整路径.
那些好奇可以按照这里这个决定背后的思维过程.
旧语法
# render app/views/application/menu.html.erb
# unless menu.html.erb is found in appp/views/my_controller
<%= render :partial => "menu" %>
Run Code Online (Sandbox Code Playgroud)
新语法
# render app/views/application/menu.html.erb
# unless menu.html.erb is found in appp/views/my_controller
<%= render partial: "menu" %>
Run Code Online (Sandbox Code Playgroud)
当然,您仍然可以将共享视图放在任何位置,并按路径引用它们
<%= render :partial => "my_own_special_shared_folder/menu" %>
除非您有充分的理由这样做,否则请坚持使用新标准并存储您的共享视图app/views/application.
| 归档时间: |
|
| 查看次数: |
15823 次 |
| 最近记录: |