2010-09-09 14 views
1

我有一個_form.html.erb部分來自模型項目的標準rails 3模板。rails ajax請求表單有錯誤的方法

#view: 
    <div id="content"> 
     <%= link_to 'Edit', edit_project_path(@project), :remote => :true %> 
    </div> 

    #projects controllers 
    def edit 
     @project = Project.find(params[:id]) 

     respond_to do |format| 
      format.html # edit.html.erb 
      format.js { render "form.js.rjs" } 
     end 
     end 

    #form.js.rjs 
    page.replace_html "content", :partial => 'form' 

    #_form.html.erb 
    <%= form_for(@project) do |f| %> 
     <% if @project.errors.any? %> 
     <div id="error_explanation"> 
      <h2><%= pluralize(@project.errors.count, "error") %> prohibited this project from being saved:</h2> 

      <ul> 
      <% @project.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
      <% end %> 
      </ul> 
     </div> 
     <% end %> 
     <p> 
     <%= f.label :name %> 
     <%= f.text_field :name %> 
     </p> 

     <div class="actions"> 
     <%= f.submit %> 
     </div> 
    <% end %> 

雖然我點擊該鏈接編輯項目,形式也通過Ajax來通過,但形式方法是目前發佈的,而不是放。這意味着當我提交時,它將創建具有與現有的相同屬性的新項目,我正在編輯創建方法的b/c,它在接收到發佈請求時被調用。我知道form_for(@project)依靠記錄ID來判斷它是否是新的,我查看了form_for,form_tag,extras_tags_for_form,form_tag_html的所有源代碼,但找不到指定哪個方法的地方表單標籤將被使用。它定義方法最接近的位置是extra_tags_for_form,但在該方法中,它只是通過已經傳遞給它的:method選項哈希篩選,但是從哪裏傳遞:方法選項?我找不到。

有什麼想法?

回答

0

你是在正確的軌道上,form_form(obj)將查看對象的髒標誌以找出如何處理它。這並不意味着你不能告訴它該做什麼:)

form_for實際上在其可選參數params中有一些哈希,:方法生活在裏面:html。所以強迫它,只是做這樣的事情

form_for @project, :html => {:method => :put} do |f|