2010-07-04 37 views
1

Asp.net WebForms和MVC有一個主頁的概念,可以很容易地爲您的站點的所有頁面定義一次性佈局。在Rails中,我正在努力尋找一個等效的使用模式或功能。在Ruby on Rails中等效的Asp.net MasterPage試圖定義一個站點範圍佈局

從我讀過它真的很容易與每一個動作定義佈局:

layout: 'viewname' 

現在似乎很儀式在每一個控制器包括,所以我說:

layout: 'application' 

在基礎ApplicationController中。

到目前爲止,這工作正常,除非我在視圖頁面中有更具體的佈局。這是在Rails應用程序中獲得一致風格的常用技巧嗎?

回答

2

想象一下,一個簡單的博客,我們有一個名爲PostsController控制器,它有兩個動作:食指和顯示

當用戶點擊http://yourwebsite.com/posts索引動作叫做 - 此操作將顯示所有可用的博客文章。

當用戶得到一個特定的博客文章顯示操作稱爲 - 即http://yourwebsite.com/posts/article-about-something-interesting

比方說,我們要索引頁有一個兩點欄佈局,我們希望每個博客,文章展示頁面有三列布局。爲了實現這一點,我們只需定義兩個單獨的佈局(在app/views/layouts文件夾中) - 我們將調用兩個列布局「application」,我們將調用三列布局「alternate」。

爲了得到索引頁使用兩欄佈局和顯示頁面中使用的三欄佈局,我們可能只是做我們的控制器如下:

class PostsController < ApplicationController 
    def index 
    @posts = Post.all 
    render :layout => "application" 
    end 

    def show 
    @post = Post.find(params[:id]) 
    render :layout => "alternate" 
    end 
end 

如果我們想所有操作使用相同的佈局,我們就可以做到這一點:

class PostsController < ApplicationController 
    layout "application" 

    def index 
    @posts = Post.all 
    end 

    def show 
    @post = Post.find(params[:id]) 
    end 
end 

最後,如果我們不指定我們要使用,那麼Rails會在默認情況下,使具有相同名稱的任何佈局,佈局我們正在顯示的資源。因此,在我們的示例中,如果我們的資源被稱爲「帖子」,如果我們定義名爲posts.html.erb的第三個佈局(在app/views/layouts中),那麼當用戶呈現任何動作時,Rails將自動使用該佈局在PostsController - 當然,我們並沒有明確要求的Rails呈現另一種佈局提供....

希望它能幫助,

+0

噢,如果只有一個佈局,被稱爲「application.html.erb」 ,那麼rails會使用它,而不必告訴它 – stephenmurdoch 2010-07-04 20:49:56

1

PDF book excerpt from Rails for .Net Developers有一個很好的解釋Rails佈局,以及與ASP.Net MasterPages比較。由於它似乎工作得很好,所以它可能會經常使用,至少由熟悉主頁面概念的開發人員使用。