2011-06-08 13 views
6

He llegado a mi primer formulario remoto en una nueva aplicación de rails 3 y no puedo enviarla de forma remota: sigue presentándose como html. He hecho esto bien en otras aplicaciones de rieles 3, así que estoy pensando que debe ser algo que he olvidado.Remote form in rails 3 aplicación se envía como html

Aquí es mi forma en mi archivo html.erb:

 <%= form_for Assignment.new, :remote => true do |f| %> 
     <%= hidden_field_tag "assignment[task_id]", @task.id %> 
     <%= hidden_field_tag "assignment[person_id]", person.id %>    
     <%= submit_tag "Add to task" %> 
     <% end %>  

Y aquí es como hace salir de la página. He incluido los enlaces de archivos javascript ya que tengo la sensación de que el problema está relacionado con el hecho de que js no se haya configurado correctamente.

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8" /> 
    <script src="/javascripts/jquery.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/person.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/jquery-ui-1.8.11.custom.min.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/jquery_ujs.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/jquery.ui.datepicker.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/jquery.colorbox-min.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/jquery.tipTip.minified.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/application.js?1306857355" type="text/javascript"></script> 

    <meta name="csrf-param" content="authenticity_token"/> 
    <meta name="csrf-token" content="ErI0bMA1E0JAXwvyVMistPsWc4fg2dG5tDPOgeur358="/> 
    </head> 

    <body class="tasks"> 

    <form accept-charset="UTF-8" action="/assignments" class="new_assignment" data-remote="true" id="new_assignment" method="post"> 
     <div style="margin:0;padding:0;display:inline"> 
     <input name="utf8" type="hidden" value="&#x2713;" /> 
     <input name="authenticity_token" type="hidden" value="ErI0bMA1E0JAXwvyVMistPsWc4fg2dG5tDPOgeur358=" /> 
     </div> 
     <input id="assignment_task_id" name="assignment[task_id]" type="hidden" value="2" /> 
     <input id="assignment_person_id" name="assignment[person_id]" type="hidden" value="1" />    
     <input name="commit" type="submit" value="Add to task" /> 
    </form>  

    </body> 
</html> 

Todo parece que se está configurando correctamente. Pero, cuando me presento me sale esto a través de mi registro:

Started POST "/tasks/2" for 127.0.0.1 at 2011-06-08 15:56:42 +0100 
    Processing by TasksController#update as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"ErI0bMA1E0JAXwvyVMistPsWc4fg2dG5tDPOgeur358=", "assignment"=>{"task_id"=>"2", "person_id"=>"1"}, "commit"=>"Add to task", "id"=>"2"} 

Como estaba diciendo, creo que sólo he perdido algo que tenía que hacer para conectar esto correctamente. Aquí está mi Gemfile también en caso de que sea relevante:

source 'http://rubygems.org' 

gem "rake", "0.8.7" 
gem 'rails', '3.0.7' 
gem 'haml' 
gem 'heroku' 
gem "heroku_backup_task" 
gem 'authlogic', '3.0.2' 
gem 'rails3-generators' 
gem 'txtlocal', :git => 'git://github.com/epigenesys/txtlocal.git' 
gem 'chronic' 
gem 'sqlite3-ruby', :require => 'sqlite3' 
gem 'bcrypt-ruby' 
gem 'taps' #for heroku db import/export 
gem 'jquery-rails', '>= 1.0.3' 
gem 'jrails' 

group :development, :test do 
    gem 'rspec' 
    gem 'mocha' 
    gem "rspec-rails", "~> 2.4" 
    gem 'database_cleaner', '0.5.2' 
    gem 'capybara', :git => 'git://github.com/jnicklas/capybara.git' 
    gem 'selenium-client' 
    gem 'machinist' 
    gem 'faker' 
end 

¿Alguien puede ver lo que falta?
gracias, max

EDIT - error tonto de mi parte: el parcial que contiene el formulario remoto se llamaba desde dentro de otra forma no remota que llamaba a la misma acción. De modo que la forma externa estaba siendo activada por el botón Enviar, no por el remoto interno. Doh. Gracias por leer.

+0

Es su "jquery_ujs.js" lo mismo que este archivo: https://github.com/rails/jquery-ujs/blob/master/src/rails.js –

+0

@dmarkow - los diferencié y son bonitos muy idéntico, solo un par de líneas con algunas diferencias. Intenté intercambiarlos y no ayudó. –

+1

Su código de formulario está configurado para publicar en '/ assignments', pero su extracto de registro corresponde a una actualización de'/tasks/2' ... –

Respuesta

7

Tuve el mismo problema que he solucionado al agregar: format =>: js a la ruta.

Por lo tanto, sería algo como esto:

<%= form_for :assignment, :url => assignments_path(:format => :js) 
+1

rails 4: <% = form_for @assignment, url: assignments_path, format:: js%> – lucianosousa

0

me encontré con esto también, aunque por diferentes razones. En mi caso fue debido a mi uso de form_tag en lugar de form_for. Este último aparentemente agrega los parámetros adecuados para hacer que la llamada pase por Ajax.