Rails条件重定向

时间:2014-02-20 09:29:56

标签: ruby-on-rails redirect

我正在尝试为新用户设置重定向到帮助页面,类似于新用户尝试提出新问题时堆栈溢出呈现如何询问页面的方式。

PostsController

  def new
    if current_user.posts_count < 5
      redirect_to newbieadvice_path
    else
      @question = Question.new
    end
  end

问题是,类似于Stack Overflow,我在帮助页面上有一个“继续发布新帖子”按钮,返回帖子#new,然后循环回到帮助页面,因为current_user.posts_count仍然是&lt; 5。

如果用户在帮助页面上,我该如何绕过重定向?

根据我的阅读,我有两种方法可以解决这个问题:

1。在视图中使用link_to_if

<%= link_to_if current_user.posts_count < 5 ... %>

不幸的是,通过直接输入网址,用户可以绕过帮助页面。

2。在数据库中使用建议计数器缓存

if current_user.advices_count < 5

并在用户访问帮助页面时增加计数。我不确定这是最好的方法。

所以我需要一种方法 1.将新用户重定向到帮助页面 2.阅读帮助页面后,用户可以返回帖子#new而不进行重定向

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

使用request.referer。所以在你的控制器中改变如下:

if URI(request.referer).path != newbieadvice_path && current_user.posts_count < 5

答案 1 :(得分:1)

  1. 在帮助页面中生成一个随机令牌,并将此令牌作为参数添加到“前往新帖子”链接,然后在您的帖子控制器内部,对此令牌进行验证。

    < / LI>
  2. 检查http请求标头的“HTTP_REFERER”值,request.env ['HTTP_REFERER'],并查看用户是否来自帮助页面。