九 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樣式...