2011-03-31 58 views
0

我正在開發一個社區/新聞文章網站,在幾乎所有頁面上都有一個帶有不同「塊」的側欄。在這些塊中有「最近的文章(顯示最近的五篇文章)」,「最近的博客」,「最近的評論」,你會得到漂移。Ruby on Rails - 加載側欄內容/塊的最佳實踐/方法

當我開始構建應用程序,我不是真的知道在哪裏把控制器代碼(比如,調用@recent_articles = Article.where ...等)。我不認爲它可以進入文章控制器,因爲它並不總是被調用的文章控制器。所以我認爲它在應用程序控制器中效果最好,因爲網站上的大多數內容都會調用它。我把「@recent_content」放到應用程序控制器中,做了一個:before_filter來加載它。

你可能會看到這個缺陷。隨着Rails的進一步發展,我重新回到了重構的階段,因爲該網站的負載非常可怕並且足夠可靠,我的所有在before_filter定義的應用程序控制器中的邏輯被加載到的每個動作上,無論它是否需要,或者不。 (當我清理應用程序控制器上的房屋時,該網站顯着加速)。

我的錯誤已經實現,但我仍然需要爲@recent_articles,@recent_blogs等定義實例變量,,因此它們只在需要時加載。當然,我最終會在網站內容緩存時將其緩存,但我希望成爲一名優秀的Rails程序員。

因此,這裏是我的問題......你究竟是如何處理這種情況,你會在哪裏把邏輯?我能想到的兩種方式,不知道哪一個比較好...

第一種方式......我看了一下從另一個Rails開發一個項目,我注意到他創建的文件做奇怪的事情就是這樣在/ lib文件夾中。例如,定義頁面元標記或活動菜單狀態的方法。老實說,我之前沒有搞清楚/ lib文件夾,認爲我的大部分東西都應該留在/ app文件夾中。

第二種方式......在我看來,像幫手似乎是要走的路。也許我可以定義一個「recent_articles」助手,在那裏調用我的@recent_articles實例變量,然後渲染並將結果傳遞給我的共享文件夾中的視圖文件。

總體而言,其通過以下方式之一是更好的方式去,無論是從性能或最佳實踐的觀點?或者有沒有更好的方法來做到這一點,我不知道?

回答

1

每當有很多模型可以調用特定的方法,我可能會使用一個模塊。我認爲這就是你在第一個想法中所談論的,因爲/ lib是放置模塊的地方。

您可以使用助手爲好,但它是一個好主意,如果能夠保持邏輯出傭工,只在機型。助手應該只是用來呈現數據的一種方式,它們是視圖的一部分。如果添加的邏輯,那麼什麼是錯的:)

確保你沒有邏輯在你的控制器也是如此。我會在開始時做同樣的事情,但這實在是一個壞主意。相反,將所有內容放入模型中,或者如果它們似乎被許多其他模型使用,則可能是模塊。

希望可以幫助你:)

+0

啊,所以這些都是我看到的lib文件夾中的模塊。看起來我將不得不閱讀那些......似乎是我需要去的路線。非常感謝。 – Shannon 2011-03-31 05:32:17