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選項哈希篩選,但是從哪裏傳遞:方法選項?我找不到。
有什麼想法?