2011-05-13 17 views
0

我正在製作自定義AJAX表單。如何使錯誤的輸入與之前輸入的數據預填充

如果用戶填寫了一半的表單,它會失敗,希望另一半完成。

由於某種奇怪的原因,表單並未預先填充至少已輸入的內容。

因爲它沒有這樣做,我該如何手動告訴它這樣做?當表單返回時,它驗證的對象仍然可以訪問,所以我可以從中提取信息。

形式的樣本

- form_for CardSignup.new do |f| 
    - unless @card_signup.nil? 
    - if [email protected]_signup.errors.empty? 
     .prefix_1.grid_4 
     - @card_signup.errors.full_messages.each do |error| 
      .warning 
      = error 
      %br/ 
    .grid_2.prefix_1{:style => "width: 166px;"} 
    = f.text_field :first_name, :style => "width: 166px;", :value => "first name", :rel => "first name" 
    %div{:class => 'error_message'} 

我的創建方法

def create 
    if params[:user] && current_user.admin 
    @card_signup = User.find(params[:user]).build_card_signup(params[:card_signup]) 
    else 
    @card_signup = current_user.build_card_signup(params[:card_signup]) 
    end 
    if @card_signup.valid? 
    respond_to do |wants| 
     #wants.html { redirect_to disclaimer_card_signup_path, :locals => { :card_signup => @card_signup } } 
     wants.json { render :json => { :html => (render_to_string :partial => 'disclaimer') } } 
    end 
    else 
    respond_to do |wants| 
     #wants.html { redirect_to new_card_signup_path } 
     wants.json { render :json => {:errors => @card_signup.errors, :html => (render_to_string :partial => '/card_signups/new_form') } } 
    end 
    end 
end 

回答

1

你這樣做:

form_for CardSignup.new 

這將實例化一個新CardSignup對象每一次提姆e你渲染表單。移動此爲新動作,並在創建操作做到這一點:

@card_signup = CardSignup.new(params[:card_signup]) 

這將通過半滿的對象返回到窗體,你會得到的已填充字段。

+0

啊,優點!我把它移到我的控制器並改變了我的表格。並且表單仍然適當地通過,但仍然不會恢復它們*完成的對象的部分。有任何想法嗎? – Trip 2011-05-13 19:26:13

+0

你如何從控制器響應?你是否傳回整個物體?你看到錯誤信息了嗎? – 2011-05-13 20:04:36

+0

在我的控制檯中,我可以檢索錯誤,是的 - 但表單沒有失敗。沒有語法錯誤。我的控制器我正在實例化它,就像你在例子中提到的那樣。我將用我的create方法更新上面的代碼。 – Trip 2011-05-13 20:24:07

相關問題