Flash

Posted by Anthony Chao on 2019-09-15

Flash

Flash 的值只會被存到下一個 request 中,如果我再次轉到另一個網頁, flash 就會被清空,所以常常被拿來用在表示錯誤訊息或者提示訊息

flash 的資料結構是 hash,只要記住這點就很容易理解怎麼使用,請看下面範例

1
2
3
4
5
#下面三種結果相同
redirect_to root_path, flash[:notice] = "Welcome Home!"
redirect_to root_path, flash: { notice: "Welcome Home!"}
#因為太常使用,所以Rails又提供下面這種簡寫
redirect_to root_path, notice: "Welcome Home!"

當然 falsh 能使用的 key 不只有 notice,你也可以存其他的 key,比方說 flash[:qoo] 或者 flash[:signed_status] 等等

Flash 只能存活在經過一個 request 之後,但如果想要讓他存活久一點可以使用 keep 這個方法

1
2
3
4
5
6
7
8
9
class QoosController < ApplicationController
def index
flash.keep
#也可以只讓其中一個 key-value pair 存久一點
flash.keep(:notice)

redirect_to qoo2s_path
end
end

另外,在某些情況下不會 trigger 新的 request,但還是想使用 flash就可以使用 now 這個方法

1
2
3
4
5
6
7
8
9
10
11
12

class QoosController < ApplicationController
def create
@user = User.new(params[clean_params])
if @user.save
# ...
else
flash.now[:notice] = "No new user created"
render action: "new"
end
end
end

在上面的例子中,儲存失敗的情況下借用 new.html.erb 的畫面,但這並不會有新的 request,這時候就要用 now 的方法才能即時存到 flash

參考資料
Rails Guide





prevent_hack