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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Ruby on Rails 生成指定版本的 Rails 專案AI
- rails graphql的使用AI
- 【棧】RailsAI
- rails on ruby,ruby on rails 之程式碼塊(二)AI
- 從Rails到Clojure再到Java,最後回到RailsAIJava
- Rails安裝AI
- Rails Security (上)AI
- rails的介面查詢詳解AI
- rails gem報錯的處理AI
- Rails session物件的 as_json方法AISession物件JSON
- Rails 一對多AI
- ruby on rails 小技巧AI
- Ruby on Rails Ping ++ 支付AI
- Rails並不是用Ruby編寫的AI
- Rails常用gem總結AI
- [譯] 如何使用 Rails HelperAI
- 第3章 Rails應用的架構AI架構
- 使用rails實現最簡單的CRUDAI
- 第1章 安裝RailsAI
- ruby on rails筆記和理解AI筆記
- Ruby on Rails中的MVC架構是如何工作的AIMVC架構
- Ruby on rails專案中 引入BootstrapAIboot
- bitnami gitlab 使用 gitlab-rails 命令GitlabAI
- Ruby on Rails Mountable vs. Full EngineAI
- 2020 時代的 Rails 系統測試 (翻譯)AI
- 肖威洞察 | Ruby on Rails 的快速學習的體系框架;AI框架
- 在 Rails6 中安裝 TailwindCSSAICSS
- 從NodeJS切換到Ruby on Rails - nikodunkNodeJSAI
- 強大的Rails/Ruby開發工具:JetBrains RubyMine 2023 for macAIMac
- kredis:用於Rails的Redis高階資料結構RedisAI資料結構
- Rails開發中使用byebug偵錯程式AI
- 如何在Rails應用程式中使用Kafka?AIKafka
- 開發新手最容易犯的50個 Ruby on Rails 錯誤(1)AI
- nginx rails 詳細站點配置入門教程NginxAI
- 從底層去認識 ruby 的load,require,gems,bundler,以及rails中的autoloadingUIAI
- [譯] 在 Rails 中使用 Flash Message(即時資訊)AI
- Flask——模板的使用Flask
- 「狐狸」的模板庫
- django的模板層Django