0

使用 Rails 3。

在通常的应用程序中,只有当用户登录时才会出现一个表单。然后在控制器中,我们将在保存新记录之前运行另一个身份验证检查。

但是,无论他是否登录,我都想向所有人显示该表单。当访问者提交带有附件等的表单时,它将检查用户是否已登录。如果他没有登录,则将他重定向到登录/signup 页面,当他完成之后,新记录才会被保存。

我知道这可以通过createand来实现save,但是有人可以更详细地说明如何以更清晰的解释来实现这一点吗?

4

2 回答 2

1
  • 用户提交表单
  • 控制器看到用户未登录
  • 控制器将提交的表单保存到数据库
  • 控制器使用新对象的 id 设置 cookie
  • 控制器重定向到登录
  • 用户登录
  • 控制器从数据库中检索持久的表单信息
  • 控制器将对象分配给用户

运行定期作业以清理旧的无人认领的表单数据。

于 2012-07-04T15:30:06.797 回答
0

好吧,在视图中,您将始终显示表单而无需任何登录检查。这里棘手的部分是保存用户在重定向到登录之前发送的数据。

一种解决方案是将发布数据保存在 cookie 中,然后在登录后将用户重定向到同一页面,再次触发创建

在控制器上,您将完全按照您的描述进行操作:

class ThingController
  def create
    if user_logged_in?
      if cookie[:stuff]
        # create the stuff from cookie and remove it
      else
        # create the stuff
      end
    else
      # redirect him to login with a callback to this same place        
    end
  end
end
于 2012-07-04T15:35:11.997 回答