ruby-on-rails-3 - 设计和存储位置_为 : how do you store the return location?

标签 ruby-on-rails-3 redirect devise

我有一个页面,其路径为(例如)/premises/92,如果用户未登录,我将在该页面上显示“请[登录] 或 [注册] 以获取其他信息”,并且我希望设计返回相同的信息用户登录后的/premises/92 页。

我读过其他帖子,我想我明白如何设计 stored_location_for应该可以工作。理论上,我可以把这样的东西放在我的 ApplicationController 中。 :

def stored_location_for(resource)
  if (r = session[:return_to])
    session[:return_to] = nil
    r
  else
    super
  end
end

我的问题是:如何/在哪里设置 session[:return_to]?

我只想在用户点击 [log in] 或 [register] 时设置 session[:return_to],但最好的方法是什么?
  • 用 JavaScript 装饰链接?这可以工作,但似乎很严厉。
  • 在渲染页面之前在 Premises Controller 中设置它?这似乎不对:如果用户不点击 [登录] 或 [注册] 链接怎么办?然后我将 session[:return_to] 设置为一些奇怪的值,如果用户从其他页面登录,这可能会绊倒我。
  • 添加 ?return_to=/premises/92查询字符串到 [log in] 和 [register] 链接,并在 RegistrationsController 和 SessionsController 中检测它并使用该信息来设置 session[:return_to]?这似乎可行,但也很严厉。

  • 这些味道都不对。为stored_location_for 设置状态的普遍接受的技术是什么?

    最佳答案

    设计使用

    session["#{scope}_return_to"]
    

    所以你可以使用 session["user_return_to"]如果您的身份验证模型是用户。

    关于ruby-on-rails-3 - 设计和存储位置_为 : how do you store the return location?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6028025/

    相关文章:

    重定向后 PHP 代码会中断吗?

    javascript - 在 casperjs 步骤中启用/禁用 javascript?

    ruby-on-rails - 在用户选择框中使用设计当前用户作为默认用户

    ruby-on-rails - API 中未初始化的常量 SessionsController

    ruby-on-rails - Rails,pow和Library未加载:/usr/local/lib/libsqlite3. 0.8.6.dylib

    ruby-on-rails - 使用 grouped_options_for_select 设置默认值,使用 f.select

    apache - 适合多个和长查询的友好 URL

    ruby-on-rails - 在密码重置期间设计允许空白密码

    ruby-on-rails - 当 ruby​​ 版本不同时时区不同为什么?

    ruby-on-rails - Rails - 在 image_tag 中插入变量