Article:
Lỗi thường gặp khi dùng flash
769
ngocdaothanh.myopenid.com 172Over 3 years ago |

Flash là thứ nháy lên một cái rồi tắt. Đơn giản vậy thôi nhưng thỉnh thoảng ta vẫn dùng sai.
Để hiểu điều trình bày ở dưới, phải có chút kinh nghiệm Rails.
Rails có tính năng flash rất hay nhiều framework khác muốn nhái. Flash thường dùng để hiện error (không phải error kiểu validation) hay notice ngắn sau khi action xử lí xong.
Xem đoạn mã sau, nếu không thấy sai chỗ nào thì hãy đọc kĩ lại tài liệu API về flash
class WeblogController < ActionController::Base
def create
@post = Post.new(params[:post])
if @post.save
flash[:notice] = "#{@post.title} has been created."
redirect_to(post_path(@post))
else
flash[:notice]= "#{@post.title} could not be created."
render(:action => "new")
end
end
end
Vấn đề là sự khác biệt giữa flash và flash.now, chúng tương ứng với sự khác biệt giữa redirect_to và render:
- flash: Chỉ mất đi khi URL thay đổi, ứng với redirect_to.
- flash.now: Mất đi ở lần request tiếp theo, bất kể URL có thay đổi hay không.
Như vậy nếu render mà dùng flash như đoạn mã trên, thì dòng error hoặc notice sẽ không biến mất đi ngay cho, cứ hiện ra trêu ngươi rất khó chịu. Đúng, phải sửa flash[:notice] thứ 2 trong đoạn mã trên thành flash.now[:notice].
Thơ rằng:
View nhà (hiện view của action hiện tại) thì nhác (chỉ flash)
View chú bác (view của action khác) thì siêng (flash now ngay)
172