2009-12-17 202 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