加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

The Flash

发布时间:2020-12-15 20:04:15 所属栏目:百科 来源:网络整理
导读:flash.now[:error] = "" render :newflash[:error] = "" redirect videos_path http://guides.rubyonrails.org/action_controller_overview.html The flash is a special part of the session which is cleared with each request. This means that values s


flash.now[:error] = ""
render :new


flash[:error] = ""
redirect videos_path


http://guides.rubyonrails.org/action_controller_overview.html

The flash is a special part of the session which is cleared with each request. This means that values stored there will only be available in the next request,which is useful for passing error messages etc.

It is accessed in much the same way as the session,as a hash (it's a?FlashHash?instance).

Let's use the act of logging out as an example. The controller can send a message which will be displayed to the user on the next request:

class LoginsController < ApplicationController
??def destroy
????session[:current_user_id] = nil
????flash[:notice] = "You have successfully logged out."
????redirect_to root_url
??end
end

Note that it is also possible to assign a flash message as part of the redirection.

You can assign?:notice,?:alert?or the general purpose?:flash:

redirect_to root_url,notice: "
redirect_to root_url,alert: You're stuck here! The?destroy?action redirects to the application's?root_url,where the message will be displayed. Note that it's entirely up to the next action to decide what,if anything,it will do with what the previous action put in the flash. It's conventional to display any error alerts or notices from the flash in the application's layout:

<html>
??<!-- <head/> -->
??<body>
????<% flash.each do |name,msg| -%>
??????<%= content_tag :div,msg,class: name %>
????<% end -%>
?
????<!-- more content -->
??</body>
</html>

This way,if an action sets a notice or an alert message,the layout will display it automatically.

You can pass anything that the session can store; you're not limited to notices and alerts:

<% if flash[:just_signed_up] %>
??<p class=welcome">Welcome to our site!</p>
<% end %>

If you want a flash value to be carried over to another request,use the?keep?method:

class MainController < ApplicationController ??# Let's say this action corresponds to root_url,but you want ?? all requests here to be redirected to UsersController#index. ?? If an action sets the flash and redirects here,the values ?? would normally be lost when another redirect happens,but you ?? can use 'keep' to make it persist for another request. ??def index ???? Will persist all flash values. ????flash.keep ? ???? You can also use a key to keep only some kind of value. ???? flash.keep(:notice) ????redirect_to users_url ??end end
5.2.1?flash.now

By default,adding values to the flash will make them available to the next request,but sometimes you may want to access those values in the same request.

For example,if the?create?action fails to save a resource and you render the?new?template directly,

that's not going to result in a new request,but you may still want to display a message using the flash.

To do this,you can use?flash.now?in the same way you use the normal?flash:

class ClientsController < ApplicationController ??def create ????@client = Client.new(params[:client]) ????if @client.save ?????? ... ????else ??????flash.now[:error] = Could not save client" ??????render action: new" ????end ??end end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读