我遇到了一個奇怪的,我不能解釋有關Rails 3和渲染局部佈局(從控制器)。我希望有人能夠對發生的事情提供一點見解。Rails 3 vs 2.3.5渲染怪異與部分和:佈局
首先,我們將這個控制器稱爲「傳統」控制器。它已經存在了很長一段時間,並且做了很多錯誤的事情,但我現在不想重構它,所以我試圖找到方法來處理我們所擁有的。
的new
動作是這樣的(在BarsController
)
def new
if something
render :partial => "foo", :layout => "bars"
elsif something_else
render :partial => "foo2", :layout => "bars"
elsif something_else_else
render :partial => "foo3", :layout => "bars"
else
render :partial => "foo4", :layout => "bars"
end
現在,在Rails的2.3.5,這個工作得很好。它會在適當的佈局內渲染適當的部分 - 我意識到佈局選項在這裏是多餘的,因爲它將默認爲酒吧佈局。當我們升級到Rails 3.0.x的,我們開始收到錯誤信息如下:
Missing partial layouts/bars with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html]
顯然layouts/bars.html.erb
文件並且一直在那裏,所以我無法弄清楚。我能夠用:layout => false
進行渲染,但這當然不起作用。最後,我想通了,如果我請執行下列操作的,它的工作原理:
1)重命名我的佈局_bars.html.erb
而不是bars.html.erb
和:
render :partial => 'foo2', :layout => 'bars'
2)保持我的佈局bars.html.erb
(什麼我想)和:
render '_foo2' # :partial option is redundant here anyway
好像使用:partial選項代替字符串,因爲第一個參數導致rails將_name.html.erb
約定應用於partial
和layout
。如果我自己插入下劃線,它會回落到我預期的行爲上,而不是在版面名稱的前面加上_
。
有誰知道這是爲什麼?
編輯好了,不知道我怎麼錯過了這個......但這裏的東西在做這個提及文檔。看起來好像它自2.3.8開始就已經存在了,也許它在2.3.5(我們正在運行的版本)中做了不同的處理?
3.4.3部分佈局
的部分可以使用自己的佈局文件,就像一個視圖可以使用 佈局。例如,您可以調用的部分是這樣的:
<%=渲染「link_area」:佈局=>「graybar」%>這將尋找一個 部分名爲_link_area.html.erb和使用使它佈局 _graybar.html.erb。請注意,部分的佈局遵循相同的 前導 - 下劃線命名爲常規部分,並放置在 相同的文件夾中,其文件屬於它們的局部文件夾(不在主文件夾 佈局文件夾中)。
如果您通過:object或:locals傳遞參數給partials,那麼這將需要更多的代碼mods,因爲這些參數不適用於模板。我希望他們沒有改變行爲...... – farhadf