我可以在哪裏放置由多個模型共享的部分文件? 我有一個名爲crop.html.erb
頁面,用於一個模型 - Photo
。 現在我想用它來叫User
還有另一種模式。將Rails中整個應用程序共享的partials放在哪裏?
我可能複製和粘貼的代碼,但這不是很乾,所以我想我會把它移動到一個部分。
,因爲它是兩種模式之間共享 - 我哪裏會地方局部?
謝謝!
我可以在哪裏放置由多個模型共享的部分文件? 我有一個名爲crop.html.erb
頁面,用於一個模型 - Photo
。 現在我想用它來叫User
還有另一種模式。將Rails中整個應用程序共享的partials放在哪裏?
我可能複製和粘貼的代碼,但這不是很乾,所以我想我會把它移動到一個部分。
,因爲它是兩種模式之間共享 - 我哪裏會地方局部?
謝謝!
Rails的慣例是把共享的諧音在/app/views/shared
。
我一般在包含常用的諧音我的看法共享文件夾。
不要緊,你把他們。您可以通過提供render
該文件的路徑提供任何部分在任意位置 - 它並不需要與該的渲染它的控制器關聯。我用一個簡單地稱爲view
目錄下partials
目錄,並調用諧音它是這樣的:
render :partial => 'partials/mypartial'
哦,我很清楚。我對最佳做法感興趣。不過謝謝! – 2010-03-05 09:38:32
'render'partials/mypartial''和'render partial:'partials/mypartial'之間有什麼區別? – 2016-01-22 13:30:15
更新
佈局繼承現在是在引導下layout and rendering 模板繼承工作方式類似。
的Rails 3.1及以下版本實現模板繼承,所以我覺得現在對於共享的諧音正確的地方是/app/views/application/
,說你是在products#index
,你可以做到以下幾點:
-# products#index
= render @products.presence || 'empty'
-# /app/views/application/_empty.html.haml
There are no items
順便說一句這是application
因爲連接是控制器繼承,所以這裏假設爲ProductsController < ApplicationController
這種方式如果你實現/app/views/products/_empty.html.haml
將被採取,上述是所有缺失的par的後退tials,我現在不能檢查,但我認爲即使是模板本身...
我絕對同意你的看法,應用程序/視圖下的應用程序文件夾是最佳選擇! – 2012-03-27 15:07:00
是的,我忘了'app /'前綴,更新,謝謝 – ecoologic 2012-03-27 18:20:44
我一直在尋找這個解決方案一段時間了。不能相信指南或任何其他在線教程忽略提及這一點。 – LunaCodeGirl 2013-12-14 11:11:08
The Rails View使用app/views/layouts
像頁眉和頁腳共享諧音,但on Rails的指南Ruby的使用app/views/shared
在an example。我想這歸結於個人偏好。我會用layouts
高層次的東西就像一個主導航或頁腳,但shared
的更窄控制器層次的東西就像一個形式。
TL; DR
導軌3。1,導軌4,導軌5以及任何隨之而來的
app/views/application
的引擎搜索這個路徑是否自動視圖不會在控制器路徑中找到。
Rails 3的和以前
app/views/shared
發動機不自動搜索此路徑。
龍故事
導軌3(和早期版本)具有沒有默認位置用於存儲共享視圖。
的非官方慣例是存儲在應用/視圖共享視圖/共享。無論你最終將其存儲但是,你必須指定
# render app/views/shared/menu.html.erb
<%= render :partial => "shared/menu" %>
這一建議得到Agile Web Development with Rails推廣的路徑。
的Rails 3.1介紹了在哪裏共享視圖存儲的官方標配:
應用程序/視圖/應用多虧了這個標準,引擎現在自動在模板應用程序/視圖/應用程序。因此,您不必再使用完整路徑。
那些好奇的人可以按照here這個決定背後的思考過程。
舊語法
# render app/views/application/menu.html.erb
# unless menu.html.erb is found in appp/views/my_controller
<%= render :partial => "menu" %>
新語法
# render app/views/application/menu.html.erb
# unless menu.html.erb is found in appp/views/my_controller
<%= render partial: "menu" %>
當然,你還可以將你的共同意見,無論你想和路徑
<%= render :partial => "my_own_special_shared_folder/menu" %>
除非你有充分的理由這樣做,否則請堅持新標準並將共享視圖存儲在app/views/application
中。
/app/views/shared /中的partials不會在我的Rails 4應用程序中出於某種原因被拾取?!? – Meltemi 2013-08-01 18:08:04
@Meltemi查看生態學的答案。 – kkurian 2013-10-01 21:31:33
對於rails 4來說,正確的目錄是app/views/application,並且我認爲這很有道理...... https://robots.thoughtbot.com/directory-for-shared-partials-in- rails「 – 2015-08-07 20:11:12