2010-03-05 34 views
45

我可以在哪裏放置由多個模型共享的部分文件? 我有一個名爲crop.html.erb頁面,用於一個模型 - Photo。 現在我想用它來叫User還有另一種模式。將Rails中整個應用程序共享的partials放在哪裏?

可能複製和粘貼的代碼,但這不是很乾,所以我想我會把它移動到一個部分。

,因爲它是兩種模式之間共享 - 我哪裏會地方局部

謝謝!

回答

56

Rails的慣例是把共享的諧音在/app/views/shared

+3

/app/views/shared /中的partials不會在我的Rails 4應用程序中出於某種原因被拾取?!? – Meltemi 2013-08-01 18:08:04

+0

@Meltemi查看生態學的答案。 – kkurian 2013-10-01 21:31:33

+10

對於rails 4來說,正確的目錄是app/views/application,並且我認爲這很有道理...... https://robots.thoughtbot.com/directory-for-shared-partials-in- rails「 – 2015-08-07 20:11:12

3

我一般在包含常用的諧音我的看法共享文件夾。

0

不要緊,你把他們。您可以通過提供render該文件的路徑提供任何部分在任意位置 - 它並不需要與該的渲染它的控制器關聯。我用一個簡單地稱爲view目錄下partials目錄,並調用諧音它是這樣的:

render :partial => 'partials/mypartial' 
+2

哦,我很清楚。我對最佳做法感興趣。不過謝謝! – 2010-03-05 09:38:32

+0

'render'partials/mypartial''和'render partial:'partials/mypartial'之間有什麼區別? – 2016-01-22 13:30:15

45

更新

佈局繼承現在是在引導下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,我現在不能檢查,但我認爲即使是模板本身...

Railscast: template inheritance!

+2

我絕對同意你的看法,應用程序/視圖下的應用程序文件夾是最佳選擇! – 2012-03-27 15:07:00

+0

是的,我忘了'app /'前綴,更新,謝謝 – ecoologic 2012-03-27 18:20:44

+2

我一直在尋找這個解決方案一段時間了。不能相信指南或任何其他在線教程忽略提及這一點。 – LunaCodeGirl 2013-12-14 11:11:08

4

The Rails View使用app/views/layouts像頁眉和頁腳共享諧音,但on Rails的指南Ruby的使用app/views/sharedan example。我想這歸結於個人偏好。我會用layouts高層次的東西就像一個主導航或頁腳,但shared的更窄控制器層次的東西就像一個形式。

14

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中。

相關問題