Rails寶典之第七式 layout詳解

2021-08-29 08:48:40 字數 1710 閱讀 8080

一般來說layout有如下五種:

gobal layout,controller layout,shared layout,dynamic layout,action layout

假設我們有乙個views/projects/index.rhtml頁面:

[code]

[/code]

下面來看看各種layout的用法。

[b]1,global layout[/b]

[code]

<%= yield %>

[/code]

[b]2,controller layout[/b]

新增views/layouts/projects.rhtml:

[code]

<%= yield %>

[/code]

道理同上,projectscontroller當然會使用同名的projects.rhtml作layout了

注意的是controller layout會覆蓋global layout

[b]3,shared layout[/b]

新增views/layouts/admin.rhtml:

[code]

<%= yield %>

[/code]

我們建立了admin layout,然後在需要使用該layout的controller中指定即可:

[code]

layout "admin"

def index

@projects = project.find(:all)

endend

[/code]

[b]4,dynamic layout[/b]

有時候我們需要根據不同的使用者角色來使用不同的layout,比如管理員和一般使用者,比如部落格換膚(也可以用更高階的[url=

[code]

layout :user_layout

def index

@projects = project.find(:all)

endprotected

def user_layout

if current_user.admin?

"admin"

else

endend

end[/code]

[b]5,action layout[/b]

在action中指定layout即可:

[code]

layout :user_layout

def index

@projects = project.find(:all)

render :layout => 'projects'

endprotected

def user_layout

if current_user.admin?

"admin"

else

endend

end[/code]

上面的index方法指定使用projects layout,當然我們也可以指定不使用layout,如printable頁面:

[code]

def index

@projects = project.find(:all)

render :layout => false

end[/code]

需要注意的是,這5種layout會按順序後面的覆蓋前面的layout

關於erb和capture的文章:[url]

Rails寶典之第二十式 限制訪問

續上一節。我們在頁面中加上如下 來限制public訪問 code if admin?link to new episode new episode path end code 顯然,只有admin才能新建episode 我們來實現admin?方法 admin?在我們的頁面中使用,它是乙個helper...

籬笆家裝寶典之七 移門壁櫃

籬笆家裝寶典之七 移門壁櫃 程式設計師xdjm們買套房子不容易,已經被開發商或二手房上家扒了層皮,不能再被裝修商 建材商 家具商 軟裝商吸血了。我們要用知識武裝自己,與js血拼到底,就快來看冷山整理的籬笆家裝寶典系列吧。心靜裝修 7.1.移門之選購篇 選購移門時要關注以下六個方面 型材分三種 1.鋁...

python學習第七週之反射

1.反射 通過字串對映或修改程式執行時的狀態。有四個方法 hasattr getattr setattr delattr 2.1 如以下程式 hasattr 判斷有沒有屬性 hasattr d,choice 分別為 物件名 字串 getattr 呼叫該屬性 class dog object def ...