先创建,登录或注册

时间:2012-07-04 15:20:26

标签: ruby-on-rails ruby-on-rails-3

使用Rails 3。

在通常的应用程序中,仅在用户登录时才会显示表单。然后在控制器中,我们将在保存新记录之前再次检查身份验证。

但是,无论他是否登录,我都希望向所有人显示该表单。当访问者提交带有附件等的表单时,它会检查用户是否已登录。如果不是,则重定向他登录/注册页面,当他完成时,只保存新记录。

我理解这可以通过createsave实现,但有人可以详细说明如何以更清晰的解释来实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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