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