應答1 提交模板(render 方法

2021-08-29 15:21:22 字數 1874 閱讀 1553

模板是個檔案,它定義乙個應答的內容。rails 支援兩種格式的模板:rhtm,它是包含有

ruby **和構建器的html,更多地用於程式方式。

actioncontroller::base.template_root =dir_path

render()方法是所有rails 內提交操作的心臟。它接受乙個選項雜湊表來告訴它提交什

麼,以及如何提交它。讓我們看看使用在「控制器」內的render 選項。

1、render(:text =>string) 傳送給定字串給客戶端。不完成模板解釋或者html 轉義

工作。def index

render(:text => "hello there!")或render :text=>'hello,threr!'

endend

2、render(:inline =>string, [:locals=>hash_pair],[ :type =>"rhtml"|"rxml"] )

根據string動態生成模板並顯示資料,其中has_pair指以雜湊表鍵值對形式的數值。

例!def test_inline

render :inline=>"<%='hello'+word%>",:locals=>,:type=>"rhtml"

end3、render(:action =>action_name)呼叫「控制器」內的給定動作提交執行結果。有時候有人會在應該使用redirect 的地方錯誤地使用render()的:action

def display_cart

if @cart.empty?

render(:action => :index)

else

# ...

endend

4、render(:file =>path, [ :use_full_path =>true|false] ) 提交給定路徑(它必須包含在乙個外部檔案中)的模板。預設地這應該是個給模板的絕對路徑,但是如果:use_full_path 選項為true,只需要在path中指定相對路徑即可,(相對於基本路徑。模板的基本路徑可設定在你的應用程式配置中)

5、render(:template =>name) 提交模板並重新排列要傳送回客戶端的結果文字。

:template 值必須包含「控制器」和「動作」的新名字這兩個部分,並且用前向的反斜

def index

render(:template => "blog/short_list")

endend

6、render(:partial =>name, ...) 提交乙個區域性模板。

7、render(:nothing => true) 不提交任何東西—傳送乙個空體給瀏覽器。

8、render() 帶有未經覆寫的引數,render()方法提交預設模板給當前「控制器」和「動

def index

render

endend

(如果沒有動作,則「控制器」的預設動作(index)會被呼叫)。

def index

endend

(如果沒有定義「動作」方法,則「控制器」將直接呼叫模板)。

endrender 的所有格式接受可選的:status 和:layout 引數。

:status 引數用於設定http 應答內的header 狀態。它預設為」200 ok」。不要使用帶有3*** 狀態的render()來重定向;rails有個redirect()方法用於這個目的。

:layout 引數確定提交中的結果是否被包裝成乙個layout。如果引數是:false,則沒有layout 被應用。如果設定為nil 或true。

則有個layout 將被應用,只要有個相關的當前「動作」。如果:layout 引數有字串值,它在提交時將接受layout 的名字來使用。當:nothing 選項有效時,layout 將不會被應用。

1 模板方法 Template Method

使用template method乙個前提條件是使用部分 整體框架或者說流程是相對穩定的。這裡用圖說明左邊是傳統方法 右邊是模板方法 假設實現軟體的流程是穩定的 1 2 3 4 5 6 其中step 4 5是 變化的 是使用者定義的。傳統模式是 使用者定義step 4 5 並且寫出流程。模板方法是 ...

模板方法模式1

author version 0.1 模板設計模式 時間消耗模板 使用該模板測試方法的執行時間 public abstract class timeexpendtemplate 建立timeexpendtemplatetest類繼承timeexpendtemplate模板,重寫method的方法,例...

1 模板方法模式

晚繫結機制 定義乙個操作中的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。使用場景 1.多個子類有公有的方法,且邏輯基本相同時 2.重要,複雜的演算法,可以把核心演算法設計為模板方法,周邊的相關細節功能則由各個子類實現 3.重構時,把相同...