2015-04-01 67 views
1

我在application.html.erb一個yield網站上的所有網頁,設置content_for爲

<%= yield(:alert_area) %> 

...我想爲這個區域在網站上的每一頁(使用佈局)設置內容。內容無法在視圖中硬編碼,因爲它只能在某些情況下顯示(即「您的個人資料是不完整的,請點擊這裏去完成它!」)

我怎樣才能做到這一點?我可以知道我可以嘗試在ApplicationController中使用content_for,但似乎是通過將內容放入控制器來打破MVC模式。另外,無論如何,我正在以這樣的方式進入死路。

什麼是合適的Rails MVC方式來粘貼網站的每個頁面上的動態內容?

回答

1

以及什麼bukk530表明代替yield/content_for構建體,使用render/partial構造,並在部分只是有一個條件,所以它只會呈現當你想要的東西。例如。

- flash.each do |name, message| 
    %div{ class: "flash flash-#{name}" }= message 
+1

Geez。我以前怎麼看不到?我想我只需要休息一下! – Jeff 2015-04-01 19:49:35

+0

是的,說實話,我不知道爲什麼標準的Rails佈局模板不僅僅包含這樣的東西。 – smathy 2015-04-01 20:34:16

1

最好的方法是使用flash,它存儲在會話中,並且它在設置後只顯示一次。

實施例:

application.html.erb:

<span class="error"><%= flash[:error] %></span> 

控制器:

def raise_error 
    flash[:error] = "Hi! i'm an error!" # Use i18n here 
    redirect_to :somewhere 
end