`
fireflyman
  • 浏览: 118375 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

Rails之道---><The Rails Way> 摘录(2)运用控制器

    博客分类:
  • ROR
阅读更多
1.你的控制器僅僅是用來映射URL(包括其它的一些HTTP請求),并將你的數據模型和視圖模板串接起來,將它們的計算結果反饋給HTTP響應.

2.在實踐中,非常重要的一點是記住了解你的應用程序的各個部分不過是不同的Ruby代碼,以及當這些代碼被加載到Ruby解析器中后它們都做些什么.

3.reload! 重新載入控制臺

4.在控制器的動作中如果沒有指定任何東西,那么它的默認行為是渲染與其相對應的同名試圖模板,即每個控制器的方法都隱含了一個render命令,而render同時又是一個真實存在的方式.
exp:  
def index
    render :template => "demo/index"
 end


5.如果一個控制器的動作不想渲染默認的模板,那么調用render方法以指定渲染其它的任何一個模板,在app/views中的任意一個模板都是可以被渲染的.(實際上,整個project里的任何一個視圖都是可以被渲染的.)

6.(1)渲染一個完全不同的模板
   如果你可以在一個動作中渲染不同的模板,那么你可以通過:template或者:file參數在一個動作中渲染任意指定的模板文件.

引用
**:template參數指定一個模板根目錄的相對路徑,默認是app/views(可修改)

  **:file參數接收一個文件的絕對路徑


render :template => "abuse/report"

app/views/abouse/report.rhtml
render :file => "/railsapps/myweb/app/views/templates/common.rhtml"


(2)渲染局部模板(局部渲染)
   使用局部渲染使得你可以將模板分割成小文件,使得代碼不至于被搞得亂七八糟,同時,局部模板可以被復用

(3)渲染內聯模板代碼
  類似把視圖代碼發送給瀏覽器
該功能的存在的一個主要原因是用于Rails的Ajax視圖輔助方法.
  
render :inline => "<%= auto_complete_result(@headings, 'name') %>"

(4)渲染文本
    如果您只需要瀏覽器返回一段簡單的文本,如在應答一個Ajax請求或者其它應用程序系統接口調用時,你可以直接渲染、返回一段文本.

       
 render :text => 'Submission accepted'


7. render命令也可以接受一系列選項以返回特定的數據結構,通過適當地設置響應的content-type,可以方便的實現自動化處理.
    (1):json
      JSON是專門提供給JS使用的輕量級數據結構,其通常是將Ajax請求的響應值通過這種格式返回.(備注:ActiveRecord已經內置了對JSON的支持,所以在Rails里處理JSON是非常方便的)
         
render :joson => @record.to_json

   
     (2):xml
       ActiveRecord同樣內置了對XML格式的支持
      
render :xml => @record.to_xml


8.什么都不渲染

   
rendre :nothing =>  true, :status => 401

9.渲染的屬性
 
引用
(1):content_type  用于驗證你實際發送的內容是否是你用的:content_type指定的類型
  (2):layout   指定是否需要布局模板以及使用哪個布局模板
  (3):status 按照自己的狀態選擇合適的狀態碼


引用
常用狀態碼
307 暫時重定向(請求的資源暫時轉移向另一個URL)
401 為授權
403 禁止訪問(服務區認識這個請求,但是拒絕返回)
404 Not Found(服務器找不到請求需要的資源)
503服務不可用(服務暫時不可用)

301  永久定向
302 暫時定向
303 表示去另外的地方看看(一個303定向將告訴用戶端,不管你原來使用的是什么動作,先發個GET請求到新地址)
307 暫時重定向 (使用和原來一樣的動作給新地址發一次請求)


8.無論渲染默認的或者指定的模板,或者是其他局部模板、文字或者其他的東西,渲染都是處理一個請求的最后一個.重定向到意思是終止當前的請求,再啟動另一個新的請求.            (備注:如果你的邏輯很復雜,在完成重定向或者渲染后可以使用return來結束流程,以避免出現DoubleRenderError錯誤)

def show 
  @user = User.find(params[:id])
      if @user.activated?
         render :action => 'activated' and return
    end
 
end


9.Rails在控制器和視圖層傳遞的數據使用的是實例變量.典型的做法是在控制器的方法中初始化一個或者多個實例變量,然后在其對應的視圖模板中就可以使用了.

10.過濾器讓控制器可以在執行動作方法之前或者之后加入操作.其一般用來在執行動作前做認證、緩存管理或者其他的鑒權處理.過濾器采用宏格式,它們出現在你的控制器的類定義頂端,在方法定義之前.(同時為了突出過濾器的裝飾模式的本質,一般在使用過濾器時省略方法后的括號)
  
before_filter :require_authentication

備注:
(1)可以給過濾器傳遞任意多的符號(before_filter :security, :audit, :compress)

(2)可以拆分成單行
before_filter :security
before_filter :audit
before_filter :compress


(3)不能在控制器中以before_filter和after_filter命名的方法來創建過濾器

(4)應該將過濾器所調用的方法設定為protected或者private,這樣可以避免它們被當作公共動作而被執行.

(5)有時候你可能需要特別控制過濾器的被執行順序,在這個情況下,你可以使用prepend_before_filter和prepend_after_filter,使用這個方法所加入的過濾器,會被添加到過濾器隊列的開頭,也將被先執行.

(6)在一個類中指定的過濾器對其子類也是有效的,但有些時候,一些子類可能需要跳過其父類中指定的過濾器
skip_before_filter :authenticate

(7)可以給過濾器指定其適用的或者需要排除的條件,兩種方式都可以指定單一的方法(:only=> :index)或者一個數組(:except => [:foo, :bar])

11.除了渲染試圖模板外,Rails內置了發送流文件返回給瀏覽器到功能(在Rails中內置了兩個方法做這個事情, ActionController::Streaming module: send_data和send_file)
(1)send_data(data, options = {} )
    send_data方法允許你給用戶以指定的名字發送文本或者二進制的數據
     
引用
:filename給瀏覽器提供一個文件名
      :type指定HTTP內容類型,默認的是application/octetstream.
      :disposition 指定該文件在瀏覽器是顯示還是下載()其值只能是inline和attachment,默認是attachment).
      :status指定返回給瀏覽器到應答狀態碼,默認是"200 ok"



























分享到:
评论

相关推荐

    rails-bootstrap-modals:这个应用程序展示了如何在 rails 4 中使用模态

    Rails 是一个基于 Ruby 语言的开源 Web 应用框架,它遵循 MVC(模型-视图-控制器)架构模式。Bootstrap 是一个流行的前端开发框架,提供了一系列预先设计的 CSS 和 JavaScript 组件,帮助开发者快速构建响应式、移动...

    ProCamera2D

    - Camera Window &gt;&gt;DEMO - Cinematics &gt;&gt;DEMO - Content Fitter &gt;&gt;DEMO - Forward Focus &gt;&gt;DEMO - Geometry Boundaries - Limit Distance &gt;&gt;DEMO - Limit Speed &gt;&gt;DEMO - Numeric Boundaries &gt;&gt;DEMO - Pan ...

    The Rails 5 Way-Leanpub(2017).pdf

    Since the API documentation is liberally licensed (just like the rest of Rails), there are some sections of the book that draw from the API documentation. But in practically all of those cases, the ...

    The Rails 4 Way

    ### 关于《The Rails 4 Way》的知识点总结 #### 标题:The Rails 4 Way 这本书主要讲述了Ruby on Rails 4版本的核心特性和最佳实践。Ruby on Rails(简称Rails)是一个用Ruby语言编写的开源全栈Web应用框架。本书...

    rails-chm-2-0-2.rar

    `rails-documentation-2-0-2.chm` 文件详细涵盖了这些概念,包含了关于Rails 2.0.2的API参考、教程和指南。通过仔细阅读和实践,开发者能够深入理解Rails的工作原理,并有效地开发出高效、可维护的Web应用。

    rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机.zip

    rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机 用于 Ruby on Rails 核心开发的虚拟机简介注意:这个虚拟机不是为 Rails 应用程序开发而设计的,只是为。 这个项目自动设置开发环境,以便在 Ruby on Rails ...

    Obie Fernandez, Kevin Faustino, Vitaly Kushner - The Rails 4 Way - 2014

    ### 关于《The Rails 4 Way》一书的知识点概览 ...通过以上章节内容的梳理,《The Rails 4 Way》这本书为读者提供了全面且深入的Rails 4框架知识体系,有助于开发者在实践中更好地理解和运用Rails的核心功能和技术点。

    rails-documentation-2-0-2

    rails-documentation-2-0-2

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    the rails way

    《The Rails Way》一书由Obie Fernandez撰写,属于Addison-Wesley Professional Ruby系列,该系列致力于为读者提供实用、面向人且深入的信息,帮助他们利用Ruby平台创建动态技术解决方案。这一系列书籍的创立基于一...

    rails-documentation-1-2-1.zip

    标题 "rails-documentation-1-2-1.zip" 暗示这是一份关于 Ruby on Rails 框架的文档,版本为 1.2.1。Ruby 是一种面向对象的编程语言,而 Rails 是一个基于 Ruby 的开源 Web 应用程序框架,遵循 Model-View-...

    rails应用--导航栏实例工程

    Rails是一个流行的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,使得开发过程更加高效且结构化。这个实例工程将帮助我们了解如何在Rails应用中实现动态导航,提升用户体验。 首先,我们需要了解...

    rails_多文件上传

    &lt;td colspan="2"&gt;&lt;b&gt;上传文件&lt;/b&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td align="right" width="15%" style="line-height:35px;"&gt;添加文件:&lt;/td&gt; &lt;td&gt;&lt;a href="javascript:void(0);" class="files" id=...

    Agile Web Development with Rails, 2nd Edition

    Justin Gehtland , Andreas Schwarz &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;http://ecx.images-amazon.com/images/I/51YZKK7C2WL._SS500_.jpg&lt;br&gt;&lt;br&gt;&lt;br&gt;http://www.amazon.com/Agile-Web-Development-Rails-2nd/dp/0977616630

    rails-nginx-passenger-ubuntu, 关于如何在 Nginx 8.04服务器上启动和运行和乘客的说明.zip

    rails-nginx-passenger-ubuntu, 关于如何在 Nginx 8.04服务器上启动和运行和乘客的说明 rails-nginx-passenger-ubuntu我关于用 ubuntu 。Nginx 。乘客和mysql建立 Rails的简单制作服务器的笔记。别名echo"alias ll='...

    rails-api-4.0.0

    Ruby on Rails是由David Heinemeier Hansson创建的开源Web应用框架,遵循MVC(模型-视图-控制器)架构模式,以其简洁、高效的代码和“约定优于配置”的哲学而闻名。在Rails 4.0.0中,引入了专门针对API开发的Rails ...

Global site tag (gtag.js) - Google Analytics