【发布时间】:2008-09-19 17:31:33
【问题描述】:
我想将当前 URL 存储在会话变量中以引用之前访问的页面。
如果我存储每个 URL(通过 ApplicationController 上的 before_filter),以重定向结尾的操作(创建、更新等)也被视为上次访问的页面。
有没有办法告诉 Rails 只在模板被渲染时执行一个函数??
更新
感谢 after_filter 提示...写了这么多 before_filters 我没有看到明显的内容。但是@performed_redirect 的技巧不起作用-
这是我目前得到的
class ApplicationController < ActionController::Base
after_filter :set_page_as_previous_page
def set_page_as_previous_page
unless @performed_redirect
flash[:previous_page] = request.request_uri
else
flash[:previous_page] = flash[:previous_page]
end
end
end
我需要实现一个“返回”链接,而不使用 Javascript,即 HTTP Referer。抱歉,如果我应该提到这一点,我感谢您的帮助!
更新 2
我找到了一个解决方案,它不是很优雅,只有在您的应用遵循标准命名方案时才有效
def after_filter
if File.exists?(File.join(Rails.root,"app","views", controller_path, action_name+".html.erb"))
flash[:previous_page] = request.request_uri
else
flash[:previous_page] = flash[:previous_page]
end
end
【问题讨论】:
-
现有的视图文件不会阻止您的控制器重定向。
-
顺便说一句,什么 Rails 版本?
标签: ruby-on-rails ruby