Bug no FCGI utilizando método POST com :multipart => true

Ontem ao publicar uma demo no ar, penei para descobrir porque eu não conseguia criar um novo produto durante o teste da aplicação. Utilizando o WEBRick eu conseguia criar normalmente. Seria um problema de banco de dados ou da utilização da versão de alguma gem? Além disso, todos os outros formulários de criação funcionavam.

O que será então?

Se trata de um bug no FCGI. Simplesmente quando o método multipart está definido como true, ao tentar cadastrar um dado novo no banco de dados, ele não consegue direcionar o POST para a action create do seu controller. A solução é simples e indolor. No seu form de new faça o seguinte:

<%= error_messages_for :product %>

<% form_for(:product, :url => "#{products_path}/", :html => { :multipart => true }) do %>

  <%= render :partial => 'form' %>

  <p>
    <%= submit_tag "Salvar" %>
  </p>
<% end %>

Note que no lugar de @products eu pus :product, :url => ”#{products_path}/”, isto porque o bug somente ocorre pela falta da barra após o nome do controller. Se a action do form estiver somente ”/products” ele irá entender que você quer acessar a action index e não o create. Com a barra no final da action tudo vai funcionar perfeitamente.

Qualquer dúvida, comente, talvez hajam soluções melhores.

O crédito para o descobrimento deste bug é para o Everton Carpes.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>