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