重定向后添加Flash消息

时间:2011-03-25 04:12:38

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

因此,当我退出并尝试投票时,我会被重定向到我的登录页面。查看此问题我询问了有关我的代码的详细信息: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

1 个答案:

答案 0 :(得分:0)

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

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方法获取通知。