多页帐户创建

时间:2009-12-17 05:31:29

标签: ruby-on-rails

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

  • 第一个(索引)只收集问题的一个摘要字段。
  • 第二个(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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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