2009-12-17 134 views
0

我想建立一个用户注册页面,将跨越三个页面并创建两个记录,一个用户对象和票据对象:多页帐户创建

  • 第一(指数)收集只是问题的一个总结字段。
  • 第二个(signup_a)收集问题的详细描述,自动填充前一个摘要,将会出现在票证对象中的一些相关联的详细信息,以及将在用户对象中出现的名字/姓氏/电子邮件
  • 第三个(signup_b)为用户对象添加更多细节,如地址,城市,州等,但没有更多细节被添加到票证对象,因此可以在此处将其关闭。
  • 最后一页(signup_c)显示所有的用户/票务信息返回给客户端,并在确认按钮后保存。

目前,我有一个控制器(没有错误检查或简化的respond_to代码)的方法:

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 

问题是...我不希望保存的信息进入数据库在每一个步骤,只有最后一个,但每个页面的变量之前没有显式引用下一页中没有被传递。如何继续添加到票证和用户对象,以便信息一直保存到我最后一页保存的地方! ?另外,当我执行@ user.save!方法...我仍然可以调用实例中的单个属性或执行保存!根据信息是否存储,将对象转换为真/假值?

回答

0

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

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

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

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

为signup_b和C不会,我需要做的是这样 会话[:票据] << PARAMS [:门票] 什么?看起来这只会覆盖上一步? – Kevin 2009-12-17 06:12:01

+0

另外,我听说在会话中存储模型对象是不好的? – Kevin 2009-12-17 06:13:23

+0

而不是在“b”和“c”步骤中覆盖session [:ticket],可以将这些页面中的各个元素添加到现有会话[:ticket]对象中,即“session [:ticket] [:field1] = params [:ticket] [field1]“等。 – Legion 2009-12-17 06:19:54