ruby-on-rails ajax checkbox prototypejs

ruby on rails - Rails checkbox AJAX llama, no quiere renderizar nada



ruby-on-rails prototypejs (1)

render :layout => false significa que desea renderizar la vista ''alternar'' sin diseño.

Si no desea renderizar nada, debería usar :nothing => true option

def toggle @task = Task.find(params[:id]) @task.toggle! :status # if it used only by AJAX call, you don''t rly need for ''respond_to'' render :nothing => true end

EDITAR: En Rails4 / 5 puede usar head :ok lugar de render nothing: true , es la forma más preferible de hacerlo, pero el resultado es el mismo.

Tengo una pequeña configuración de demostración en la que al hacer clic en una casilla de verificación se alterna un atributo a través de AJAX. Está funcionando bien, pero Rails REALMENTE quiere renderizar algo, así que básicamente he recurrido a la creación de un archivo toggle.js.erb en blanco en mis vistas.

Acción del controlador en cuestión:

def toggle @task = Task.find(params[:id]) respond_to do |format| format.js do if (@task.status != true) @task.status = true else @task.status = false end @task.save render :layout => false end end end

Ver en la pregunta:

<h1>Tasks</h1> <ul style="list-style-type: none;"> <% @tasks.each do |task| %> <li id="<%= dom_id(task) %>"> <%= check_box_tag(dom_id(task), value = nil, checked = task.status) %> <%= task.action %> <%= link_to ''Edit'', edit_task_path(task) %> <%= link_to ''Delete'', task, :confirm => ''Are you sure?'', :method => :delete, :remote => true %> </li> <% end %> </ul> <%= link_to ''New Task'', new_task_path %> <script> $$(''input'').each(function(el) { el.observe(''click'', function(event) { // Get the task ID var elId = el.id.split("_")[1]; // Build the toggle action path var togglePath = ''/tasks/'' + elId + ''/toggle/''; // Create request, disable checkbox, send request, // enable checkbox on completion new Ajax.Request(togglePath, { onCreate: function() { el.disable(); }, onSuccess: function(response) { }, onComplete: function() { el.enable(); } }); }); }); </script>

Sin el archivo en blanco toggle.js.erb que tengo en las vistas, Rails aún me da un error que dice que está intentando renderizar algo.

En última instancia, me gustaría no tener que tener un archivo toggle.js.erb en blanco, y me gustaría incluir ese Prototipo en mi JavaScript estático y fuera de la vista.

Soy bastante nuevo en Rails, así que probablemente haya una forma más fácil de hacer esto, pero estoy un poco atascado aquí.