我正在为我们公司构建一个简单的任务应用程序,作为订购系统的一部分。
我有一个包含许多规则的任务列表。没什么复杂的...我所坚持的是添加一个复选框来完成任务。我希望它可以从索引视图实时完成,而不必点击提交。
我真的不知道该去哪里寻找。我想我需要使用 ajax 来做到这一点 - 谁能推荐一个教程或告诉我我应该寻找什么。
还考虑过一个插件,比如就地编辑插件。
提前致谢
---编辑1--
根据下面 @pcg79 的建议,我已将以下内容添加到我的应用程序中,但我不明白我如何实际更改状态。
在我的索引视图中我有这个:
<%= check_box_tag 'complete_task_1', '', false, { 'data-href' => tasks_path(@task) } %><
我已将以下内容添加到我的 application.js 中(添加 # 以使其正确调用)
$('#complete_task_1').click(function() {
$.ajax({
url: $(this).data('href'),
type: 'PUT',
dataType: 'html',
success: function(data, textStatus, jqXHR) {
// Do something here like set a flash msg
}
});
});
由于缺乏理解,我将其添加到我的任务控制器中:
def completed
@task = Task.find(params[:id])
@task.status = true
end
这看起来很合理,但不确定如何在 ajax 中实际调用它?
在我的开发日志中,我可以看到它有点工作,但它说:
ActionController::RoutingError (No route matches "/tasks"):
-- 编辑 2 --
根据下面@jdc的建议,我尝试将以下内容添加到routes.rb:
获取 'tasks/:id/completed' => 'tasks#completed', :as => :completed_task
但仍然得到 RoutingError。
-- 轻微更新 --
根据下面 @pcg79 的出色建议,我用以下内容更新了我的文件。
路线.rb
获取 '任务/:id' => '任务#completed', :as => :completed_task
索引.html.erb
<td><%= check_box_tag 'complete_task_1', '', false, { 'data-href' => completed_task_path(:id => task.id) } %></td>
任务控制器
def completed
@task = Task.find(params[:id])
@task.status = true
@task.save
end
我在浏览器中没有收到任何错误,但我的开发日志显示了以下内容:
ActionController::RoutingError (No route matches "/tasks"):
对于一个简单的复选框来说,这是一项艰苦的工作!
——另一个更新——
玩了一整天后,我决定看看用 Button_to 会发生什么,忘记了 ajax 方面的事情。我把这个放在我的代码中:
<%= button_to "Complete", completed_task_path(task.id) %>
并将路线更改为:
match 'tasks/:id/completed' => 'tasks#completed', :as => :completed_task
这真是一种享受。改回 check_box_tag 再次破坏了这一切:(
几乎已经弄清楚这是我的功能的内容。删除一些代码后,我可以更新 # 的 css:
$('#complete_task_1').click(function() {
$.ajax({
success: function(data, textStatus, jqXHR) {
$('#thing').css("color","red");
}
});
});
知道我需要什么来称呼我的行动吗? J