【问题标题】:Adding flash message after a redirect在重定向后添加 Flash 消息
【发布时间】:2011-03-25 04:12:37
【问题描述】:

所以当我退出并尝试投票时,我会被重定向到我的登录页面。查看这个问题,我询问了有关我的代码外观的更多详细信息:Redirect not working

现在我在我的会话目录中实现了一个 new.js.erb 文件(我遵循了我链接到的问题中接受的答案),它执行重定向。但是,我现在想在重定向到页面时添加一条自定义 Flash 消息,例如“您必须登录才能投票。”

我尝试添加这一行:

flash.now[:alert] = "You must be logged in to vote."

添加到我的会话控制器的新操作中,但这会在我进入登录页面时添加消息,即使我已经登录。我应该怎么做?

这是我正在使用的代码:

  def access_denied
    notices = {
      :video_vote => {:new => "You must log in before voting"}
    }
    controller_name_sym = controller_name.to_sym
    action_name_sym = action_name.to_sym
    redirect_to login_path, :notice => (notices[controller_name_sym] && notices[controller_name_sym][action_name_sym] || "You must log in to perform this action.") and return false
  end

【问题讨论】:

    标签: ruby-on-rails ruby ajax ruby-on-rails-3 redirect


    【解决方案1】:

    我不确定是否有更好的方法来做到这一点,但是当您使用拒绝访问方法时,您可以执行以下操作:

    def access_denied
        notices = {
          :vote => {:new => "You must log in before voting"},
          :video => {:destroy => "You must log in before deleting a video"} 
        }
        controller_name_sym = controller_name.to_sym
        action_name_sym = action_name.to_sym
        redirect_to login_path, :notice => (notices[controller_name_sym] && notices[controller_name_sym][action_name_sym] || "You must log in to perform this action.") and return false
    end
    

    您的通知散列将键作为控制器名称的符号,值将是操作名称符号的键与错误消息值的散列。

    然后您将在设置 :notice 中检查此哈希,如果它不存在于通知哈希中,它将默认为“您必须登录才能执行...”

    您可以从那里获取sessions#new 方法中的通知。

    【讨论】:

    • 嗯,你会推荐一个吗?
    • 我推荐第一个选项,如果他/她已经登录,则不允许用户访问登录页面。当然,除非您的系统允许您拥有多个帐户,否则...我会选择选项一。
    • 实际上,我认为这不会完美。每当用户未登录并访问登录页面时,即使他没有投票,是否会出现闪烁消息?这不应该发生。
    • 谢谢,但它似乎不起作用......除非我做错了什么
    • ok 发布了代码...没有任何反应,没有错误,但没有出现 flash 消息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    相关资源
    最近更新 更多