【问题标题】:Rails post-render flash succeedRails 后渲染 flash 成功
【发布时间】:2018-01-06 22:20:06
【问题描述】:

我现在正在学习 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

【问题讨论】:

    标签: ruby-on-rails railstutorial.org rails-flash


    【解决方案1】:

    在 Rails 对您的控制器方法执行任何操作之前,它会读取并构建响应。

    如果您在调用redirect_to 后立即返回,您的闪存将不会被捕获并插入到适当的方法中。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多