Rails的模板
一般來說layout有如下五種:
gobal layout,controller layout,shared layout,dynamic layout,action layout
下面來看看各種layout的用法。
在layouts目錄下新增application.rhtml即可,即輸出我們的projects/index.rhtml頁面
由於我們的controller都繼承自ApplicationController,所以application.rhtml會先解析
道理同上,ProjectsController當然會使用同名的projects.rhtml作layout了
注意的是controller layout會覆蓋global layout
我們建立了admin layout,然後在需要使用該layout的controller中指定即可:
上面的index方法指定使用projects layout,當然我們也可以指定不使用layout,如printable頁面:
gobal layout,controller layout,shared layout,dynamic layout,action layout
假設我們有一個views/projects/index.rhtml頁面:
程式碼
- <h2>Projectsh2>
- <ul>
- <% for project in @projects %>
- <li><%= project.name %>li>
- <% end %>
- ul>
下面來看看各種layout的用法。
1,global layout
新增views/layouts/application.rhtml:
程式碼
- <h1>Application Layout!h1>
- <%= yield %>
在layouts目錄下新增application.rhtml即可,即輸出我們的projects/index.rhtml頁面
由於我們的controller都繼承自ApplicationController,所以application.rhtml會先解析
2,controller layout
新增views/layouts/projects.rhtml:
程式碼
- <h1>Projects Layout!h1>
- <%= yield %>
道理同上,ProjectsController當然會使用同名的projects.rhtml作layout了
注意的是controller layout會覆蓋global layout
3,shared layout
新增views/layouts/admin.rhtml:
程式碼
- <h1>Admin Layout!h1>
- <%= yield %>
我們建立了admin layout,然後在需要使用該layout的controller中指定即可:
程式碼
- class ProjectsController < ApplicationController
- layout "admin"
- def index
- @projects = Project.find(:all)
- end
- end
4,dynamic layout
有時候我們需要根據不同的使用者角色來使用不同的layout,比如管理員和一般使用者,比如部落格換膚(也可以用更高階的)
程式碼
- class ProjectsController
- layout :user_layout
- def index
- @projects = Project.find(:all)
- end
- protected
- def user_layout
- if current_user.admin?
- "admin"
- else
- "application"
- end
- end
- end
5,action layout
在action中指定layout即可:
程式碼
- class ProjectsController
- layout :user_layout
- def index
- @projects = Project.find(:all)
- render :layout => 'projects'
- end
- protected
- def user_layout
- if current_user.admin?
- "admin"
- else
- "application"
- end
- end
- end
上面的index方法指定使用projects layout,當然我們也可以指定不使用layout,如printable頁面:
程式碼
- def index
- @projects = Project.find(:all)
- render :layout => false
- end
需要注意的是,這5種layout會按順序後面的覆蓋前面的layout
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9934490/viewspace-982393/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何修改Rails預設腳手架的模板AI
- Rails的Application模板中獲取當前控制器的名字AIAPP
- 精簡版的Rails框架->Rails::APIAI框架API
- Ruby on Rails 生成指定版本的 Rails 專案AI
- rails graphql的使用AI
- [Rails學習之路]Rails路由配置AI路由
- Rails中的Helper方法AI
- 【棧】RailsAI
- rails on ruby,ruby on rails 之程式碼塊(二)AI
- Rails 缺失的部分(1):InteractorsAI
- ORM和Rails的問題ORMAI
- 我的Rails時間到了AI
- 如何提高 Ruby On Rails 的效能?AI
- Rails的select_tagAI
- 從Rails到Clojure再到Java,最後回到RailsAIJava
- Rails 3 升級 Rails 4 中遇到的問題及解決方法AI
- Rails Security (上)AI
- Rails安裝AI
- Rails Code QuestionsAI
- [ruby] rails renderAI
- Rails分頁AI
- rails gem報錯的處理AI
- rails的介面查詢詳解AI
- java 和 Ruby On Rails的對比JavaAI
- 安裝rails遇到的問題AI
- Modular Rails: The complete Guide to Modular Rails Applications 筆記AIGUIIDEAPP筆記
- ruby on rails 小技巧AI
- Rails 一對多AI
- rails 配置使用mysqlAIMySql
- Rails 4.0.1 釋出AI
- Rails 3.2.7 釋出AI
- Ruby on Rails 相關AI
- Ruby On Rails 技術AI
- BackboneJS與RailsJSAI
- Rails並不是用Ruby編寫的AI
- Rails session物件的 as_json方法AISession物件JSON
- 又一個Rails的實現 GitHubAIGithub
- 讓你的Rails專案保持清潔AI