У меня есть часть _form.html.erb, полученная из стандартного шаблона rails 3. для модельного проекта.
#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, но метод для формы теперь post, а не put.это означает, что при отправке я буду создавать новые проекты с теми же атрибутами, что и существующий, который я редактирую, b / c метода create, который вызывается при получении запроса на публикацию.
Я знаю, что form_for (@Project) полагаться на идентификатор записи, чтобы сказать, является ли она новой или нет, я просмотрел все источники для form_for, form_tag, extras_tags_for_form, form_tag_html, но не могу найти место, где они указывают, какой метод для тега формы будет использоваться.Ближайшее место, где он определяет метод, находится в extra_tags_for_form, но в этом методе он просто просеивает через хэш опции: method, который ему уже передан, но откуда передается эта опция: method?Я не могу найти.
есть идеи?