2010-09-09 3 views
1

У меня есть часть _form.html.erb, которая исходит из стандартного шаблона рельсов 3 для проекта модели.рельсы 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 метода create, который вызван при получении почтового запроса.

Я знаю, что form_for (@project) полагается на идентификатор записи, чтобы определить, является ли это новым или нет, я просмотрел все источники для form_for, form_tag, extras_tags_for_form, form_tag_html, но не могу найти место, где они указывают, какой метод для тег формы. Самое близкое место, где он определяет метод, находится в extra_tags_for_form, но в этом методе он просто просеивается через хэш хэша метода: он уже передан ему, но откуда это происходит: метод option прошел? Я не могу найти.

любые идеи?

ответ

0

Вы находитесь на правильном пути, form_form (obj) будет смотреть на грязный флаг объектов, чтобы выяснить, что с ним делать. Это не значит, что вы не можете сказать, что делать, хотя :)

form_for фактически имеет несколько хэшей в своих необязательных параметрах:: метод живет внутри: html. поэтому, чтобы заставить его положить, просто сделайте что-нибудь подобное

form_for @project, :html => {:method => :put} do |f| 
Смежные вопросы