У меня есть небольшая демонстрационная установка, в которой щелчок флажка переключает атрибут через AJAX. Он работает нормально, но Rails ДЕЙСТВИТЕЛЬНО хочет что-то визуализировать, поэтому я в основном прибегнул к созданию пустого файла toggle.js.erb в моих представлениях.
Действие контроллера:
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
Посмотреть в вопросе:
<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>
Без пустого файла toggle.js.erb, который у меня есть в представлениях, Rails все еще выдает мне сообщение о том, что он пытается что-то отобразить.
В конечном счете, мне бы не хотелось иметь пустой файл toggle.js.erb, и я хотел бы добавить этот прототип в мой статический JavaScript-код и из вида.
Я довольно новичок в Rails, так что, возможно, есть более простой способ сделать это, но я застрял здесь.