Rails中使用flash總結

2021-08-21 04:32:19 字數 1857 閱讀 4706

這個flash與adobe/macromedia flash沒有任何關係。

用於在兩個actions間傳遞臨時資料,flash中存放的所有資料會在緊接著的下乙個action呼叫後清除。

一般用於傳遞提示和錯誤訊息。

使用示例:

controller**

class

postscontroller

< actioncontroller::base

defcreate # 儲存post

redirect_to posts_path(@post)

# 上面兩行可以寫成 redirect_to posts_path(@post), :notice => "建立post成功"

enddef

show

# 不需要手動設定flash notice到template, 會自動設定。

endend

view**: show.html.erb

<% if flash[:notice] %>

class="notice">

<%= flash[:notice] %>

div>

<% end %>

一共有兩種通知:notice與alert,分別表示「提示」和「錯誤警告」。

flash[:notice]與flash[:alert]有多種寫法:

flash.notice=與flash.alert=

flash[「notice」]與flash[「alert」]

redirect_to時作為引數:alert => 「…」, :notice => 「…」

另外乙個還會遇到的是flash.now,它只對當前action有效,下乙個action即無效

flash.now[:message] = 「hello current action」

flash.now設定的資料訪問方法與其它相同:均為flash[『my-key』]

原理:

flash.new是儲存在request中的。alert與notice是儲存在session中的, 只是獲取資料時新增了刪除的邏輯。

注意:

flash[:alert],flash[:notice]一般與redirect_to一起用,而不能與render一起用。

redirect_to是重定向,會重新發起請求,比render多了一次請求。flash[:alert],flash[:notice]只會出現在接下面的乙個頁面中。

而render是伺服器端**,客戶端不會重新傳送請求,比redirect_to少了一次請求。所以一旦一起用,結果是接下來兩個頁面都有flash[:alert],flash[:notice],第三個頁面時才會消失。

正確的做法是render搭配flash.now[:alert],flash.now[:notice]一起用

顯示所有notice與alert的helper

def

display_notice_and_alert

msg = ''

msg << (content_tag :div, notice, :class => "notice") if notice

msg << (content_tag :div, alert, :class => "alert") if alert

sanitize msg

end

view中只需新增:

<%= display_notice_and_alert %>

Rails中使用flash總結

九 30th,2011 trackback 這個flash與adobe macromedia flash沒有任何關係。用於在兩個actions間傳遞臨時資料,flash中存放的所有資料會在緊接著的下乙個action呼叫後清除。一般用於傳遞提示和錯誤訊息。使用示例 controller class p...

Rails中使用flash總結

九 30th,2011 trackback 這個flash與adobe macromedia flash沒有任何關係。用於在兩個actions間傳遞臨時資料,flash中存放的所有資料會在緊接著的下乙個action呼叫後清除。一般用於傳遞提示和錯誤訊息。使用示例 controller class p...

17 在rails中使用scss

在上節課我們rails中使用coffeescript雖然有問題,但是這個跟系統是windows估計有關,不過我們可以先用每個頁面去寫普通的script標籤就行了。下面講解css樣式在網頁開發中的作用,因為我們前面只是簡單的html頁面 所以頁面就很簡陋,而為了提高使用者體驗美化頁面就用到了css樣式...