多页帐户创建

Posted

技术标签:

【中文标题】多页帐户创建【英文标题】:Multi-page Account Creation 【发布时间】:2010-12-27 12:57:54 【问题描述】:

我正在尝试构建一个用户注册页面,它将跨越三个页面并创建两条记录,一个用户对象和一个工单对象:

第一个(索引)只收集问题的一个摘要字段。 第二个 (signup_a) 收集问题的详细描述,自动填充先前的摘要,一些将进入工单对象的相关详细信息,以及将进入用户对象的名字/姓氏/电子邮件李> 第三个 (signup_b) 向用户对象添加更多详细信息,例如地址、城市、州等,但没有向工单对象添加更多详细信息,因此可以在此处关闭。 最后一页 (signup_c) 将所有用户/票证详细信息显示回客户端并在确认按钮后保存。

目前,我在单个控制器中有方法(代码简化,没有错误检查或响应):

def index # Collects summary
@ticket = Ticket.new
end

def signup_a # Basic Ticket Info/User name and email
    @ticket = Ticket.new(params[:ticket])
    @user = User.new
end 

def signup_b # Address and other misc. pref's
    @ticket = Ticket.new(params[:ticket])
    @user = User.new(params[:user])
end

def signup_c #Display final results
  @ticket = Ticket.new(params[:ticket])
  @user = User.new(params[:user])
end     

def submit_ticket #Saves info
  @ticket = Ticket.new(params[:ticket])
  @ticket.save!
  @user = User.new(params[:user])
  @user.save!
end

问题是......我不想在每一步都将信息保存到数据库中,只保存最后一步,但是在下一页中没有明确引用之前每一页的变量通过了。如何继续添加到 Ticket 和 User 对象,以便信息保留到我保存的最后一页! ?另外,当我执行@user.save!方法...我仍然可以调用实例中的各个属性还是执行保存!根据是否存储信息将对象转换为真/假值?

【问题讨论】:

【参考方案1】:

不是在每个中间步骤都保存到数据库中,而是将发布的信息保存到会话中。

def signup_a
   session[:ticket] = params[:ticket]
end 

然后,当您完成时,您可以从会话中检索该数据以传递给对象构造函数。

def submit_ticket #Saves info
  @ticket = Ticket.new(session[:ticket])
  @ticket.save!

【讨论】:

对于 signup_b 和 c 我不需要做类似 session[:ticket] 另外,我听说在会话中存储模型对象不好? 除了在“b”和“c”步骤中覆盖 session[:ticket],您可以将这些页面中的单个元素添加到现有 session[:ticket] 对象,即“session[ :ticket][:field1] = params[:ticket][field1]" 等 您没有将模型对象存储在会话中。您正在存储 POST 表单的值以构建完整的参数列表,然后将其传递给模型构造函数。 感谢军团,感谢您的帮助。最后一个问题,有没有办法为后续表格做到这一点,所以我不会在控制器或模型逻辑中硬编码特定的变量实例,所以如果数据库发生变化,我不必更改特定的变量分配?

以上是关于多页帐户创建的主要内容,如果未能解决你的问题,请参考以下文章

leadtools20,从多个图像创建多页文件

从其他 PDF 创建多页 PDF

如何在stimulsoft中为多页报告创建目录?

iOS - 从 HTML 内容创建多页 PDF [关闭]

使用 android.graphics.pdf 创建多页 PDF

如何使用 React 创建多页应用程序