2010-01-08 40 views
2

我知道Rails的flash hash並不是什麼新東西,但我仍然遇到同樣的問題。Rails閃存哈希違反MVC?

控制器應該用於業務邏輯和數據庫查詢,而不是格式化字符串以顯示給用戶。但閃存散列總是在控制器中設置。這意味着我需要對Rails進行破解和解決,以使用我爲Helix格式化字符串的Helpers。

這只是MVC的務實妥協或者我在這裏錯過了什麼?

你如何處理這個問題?或者你甚至不認爲它是一個?

回答

2

似乎有可能「強制」從控制器訪問助手。看到這裏討論:

http://lojic.com/blog/2007/07/27/using-helpers-inside-controllers-in-ruby-on-rails/

你也可以「渲染」的部分實例變量。看到這個頁面:

http://snippets.dzone.com/posts/show/396

通常,如果你在控制器內稱之爲「render_partial」,不過是局部將呈現。

偶爾,將一個局部變量渲染爲一個字符串是非常有用的,這樣視圖仍然可以呈現爲正常的,並且該字符串可以被傳遞給視圖。

add_variables_to_assigns

@content_for_navbar = @ template.render_partial「佈局/ public_navbar'`

2

滑軌不一定是嚴格MVC。在Rails世界中,控制器更像是在MVC模式中被稱爲視圖控制器的東西。另外,我會爭辯說,在'純粹'的MVC中,控制器應該做而不是做數據庫查詢和業務邏輯 - 應該封裝在模型層中。控制器是關於在視圖和模型之間移動數據的。

如何爲視圖創建幫助器方法,以便格式化您插入閃存散列的任何內容?閃光燈不僅需要包含字符串值;它可以包含任意對象。我經常發現自己將一系列模型驗證錯誤放入flash[:error],並編寫一個幫助器方法將這些消息格式化爲<ul>

0

如果您真的想要,您可以在閃存變量中存儲一個密鑰,然後在視圖中將該密鑰轉換爲實際的消息。閃光燈如何顯示不是以任何方式內置。這完全取決於你爲了獲得純粹的MVC而願意投入多少工作。