Rails post-渲染flash成功
Rails post-render flash succeed
我正在学习 rails。今天出于一些奇怪的原因,我将 flash 行放在重定向之后,这显然是一种不好的做法。但奇怪的是,在重定向之后 flash 起作用了。
flash不是应该用来给下一个请求携带消息的吗?
考虑到这一点,我添加了一行应该使程序在重定向后停止 10 秒。然后我注意到整个网站在重定向前会保持 10 秒。为什么 redirect_to 方法等待 10 秒?如果我用 render 替换 redirect_to 方法,就不会出现这种情况。我把代码块放在下面。
redirect_to root_url
message = "Account not activated. "
message += "Check your email for the activation link."
flash[:danger] = message #can still see the flash after redirect
整个控制器:
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
if user.activated?
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_back_or user
else
redirect_to root_url
sleep 10
message = "Account not activated. "
message += "Check your email for the activation link."
flash[:danger] = message
end
else
flash.now[:danger] = "Invalid email/password combination"
render "new"
end
end
def destroy
log_out if logged_in?
redirect_to root_url
end
end
在 Rails 对您的控制器方法执行任何操作之前,它会读取并构建响应。
如果您在调用 redirect_to
后立即 return,您的 flash 将不会被捕获并插入到适当的方法中。
我正在学习 rails。今天出于一些奇怪的原因,我将 flash 行放在重定向之后,这显然是一种不好的做法。但奇怪的是,在重定向之后 flash 起作用了。
flash不是应该用来给下一个请求携带消息的吗?
考虑到这一点,我添加了一行应该使程序在重定向后停止 10 秒。然后我注意到整个网站在重定向前会保持 10 秒。为什么 redirect_to 方法等待 10 秒?如果我用 render 替换 redirect_to 方法,就不会出现这种情况。我把代码块放在下面。
redirect_to root_url
message = "Account not activated. "
message += "Check your email for the activation link."
flash[:danger] = message #can still see the flash after redirect
整个控制器:
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
if user.activated?
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_back_or user
else
redirect_to root_url
sleep 10
message = "Account not activated. "
message += "Check your email for the activation link."
flash[:danger] = message
end
else
flash.now[:danger] = "Invalid email/password combination"
render "new"
end
end
def destroy
log_out if logged_in?
redirect_to root_url
end
end
在 Rails 对您的控制器方法执行任何操作之前,它会读取并构建响应。
如果您在调用 redirect_to
后立即 return,您的 flash 将不会被捕获并插入到适当的方法中。