多页帐户创建
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 表单的值以构建完整的参数列表,然后将其传递给模型构造函数。 感谢军团,感谢您的帮助。最后一个问题,有没有办法为后续表格做到这一点,所以我不会在控制器或模型逻辑中硬编码特定的变量实例,所以如果数据库发生变化,我不必更改特定的变量分配?以上是关于多页帐户创建的主要内容,如果未能解决你的问题,请参考以下文章