Rails之道 摘錄 2 運用控制器

2021-08-30 16:20:29 字數 3493 閱讀 9117

1.你的控制器僅僅是用來對映url(包括其它的一些http請求),並將你的資料模型和檢視模板串接起來,將它們的計算結果反饋給http響應.

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

3.reload! 重新載入控制台

4.在控制器的動作中如果沒有指定任何東西,那麼它的預設行為是渲染與其相對應的同名試圖模板,即每個控制器的方法都隱含了乙個render命令,而render同時又是乙個真實存在的方式.

exp:

def index

render :template => "demo/index"

end

6.(1)渲染乙個完全不同的模板

如果你可以在乙個動作中渲染不同的模板,那麼你可以通過:template或者:file引數在乙個動作中渲染任意指定的模板檔案.

**:file引數接收乙個檔案的絕對路徑[/quote]

(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.渲染的屬性

[quote](1):content_type 用於驗證你實際傳送的內容是否是你用的:content_type指定的型別

(2):layout 指定是否需要布局模板以及使用哪個布局模板

(3):status 按照自己的狀態選擇合適的狀態碼[/quote]

[quote]常用狀態碼

307 暫時重定向(請求的資源暫時轉移向另乙個url)

401 為授權

403 禁止訪問(服務區認識這個請求,但是拒絕返回)

404 not found(伺服器找不到請求需要的資源)

503服務不可用(服務暫時不可用)

301 永久定向

302 暫時定向

303 表示去另外的地方看看(乙個303定向將告訴使用者端,不管你原來使用的是什麼動作,先發個get請求到新位址)

307 暫時重定向 (使用和原來一樣的動作給新位址發一次請求)[/quote]

8.無論渲染預設的或者指定的模板,或者是其他區域性模板、文字或者其他的東西,渲染都是處理乙個請求的最後乙個.重定向到意思是終止當前的請求,再啟動另乙個新的請求. (備註:如果你的邏輯很複雜,在完成重定向或者渲染後可以使用return來結束流程,以避免出現doublerendererror錯誤)

def show 

@user = user.find(params[:id])

if @user.activated?

render :action => 'activated' and return

endend

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方法允許你給使用者以指定的名字傳送文字或者二進位制的資料

[quote]:filename給瀏覽器提供乙個檔名

:disposition 指定該檔案在瀏覽器是顯示還是下載()其值只能是inline和attachment,預設是attachment).

:status指定返回給瀏覽器到應答狀態碼,預設是"200 ok"[/quote]

2 編寫控制器

coding utf 8 author lixiang def index return hello world def func test return test web2py controllers.執行python web2py.py啟動伺服器,然後瀏覽器輸入 結果如下圖 接著瀏覽器輸入 結果...

FPGA SD卡控制器2

spi 序列外圍裝置介面,是一種高速 全雙工 同步的資料匯流排。在晶元管腳上只占有4根線。1.初始化供電電壓 上電後,經過至少74個clk 2.傳送cmd0 進入idle狀態 3.等待sd卡返回響應 r1 sd卡響應後,判斷響應資料。如果返回訊號為8 h01,在接收返回資訊期間sd cs 0,此時s...

YII2 控制器簡述

控制器繼承自yii base controller類的物件,負責處理請求和生成響應,接收資料併發送到模型,傳送模型結果到檢視。1.操作 控制器由若干操作組成,是執行終端使用者請求的最小單元。操作view,定義方法名為actionview 2.路由 終端使用者通過路由尋找到操作,路由是有包含控制器id...