Rails中使用flash總結

2021-07-02 04:52:57 字數 1813 閱讀 1724

九 30th, 2011

trackback

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

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

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

使用示例:

controller**

class postscontroller < actioncontroller::base
def create     # 儲存post
flash[:notice] = "建立post成功" # 可以直接寫成notice = "建立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] %>

<%= flash[:notice] %>

<% 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]一起用

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總結

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

17 在rails中使用scss

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