AJAX请求找不到模型ID

时间:2016-10-23 18:16:36

标签: javascript jquery ruby-on-rails ruby ajax

我试图在索引页面上调用ajax方法来更新属性。在页面刷新时更新(成功)属性,因为任务(这是针对待办事项列表应用程序)从不完整列表移动到完整列表。但是,当使用单击按钮调用ajax请求时,我在rails控制台上收到以下错误:

ActiveRecord::RecordNotFound (Couldn't find Task with 'id'=:id [WHERE "tasks"."user_id" = ?]):
  app/controllers/tasks_controller.rb:47:in `complete'

这是我的ajax请求:

$(document).ready(function() {

console.log("working");


$('.task_submit_box').click(function() {

  $.ajax({url: 'tasks#complete', type: "PATCH", success: function(result) {
    $('.task_area').html(result);
console.log('test');
  }});

});

});

我的控制器方法:

def complete
    @task = current_user.tasks.find(params[:id])
    @task.update_attribute(:completed_at, Time.now)
    @task.update_attribute(:completed, true)



    redirect_to root_path
  end

我应该更新的索引页面区域:

<ul class="wrapper_task_list">
    <% @task.each do |task| %>


    <% if task.completed == false %>
    <li>
      <div class="task_area", id="incomplete_task_area">
      <%= link_to task.title, task_path(task), class: 'wrapper_task_name'%>
      <%= form_for task, remote: true do |f| %>
        <%= f.check_box :completed, class: 'task_check_box' %>
        <%= f.submit 'update', class: 'task_submit_box' %>
      <% end %>
      </div>
    </li>
    <% end %>
    <% end %>
  </ul>

我在尝试将ajax请求与正确的task /:id匹配时迷失了方向。我的路线特别提到了ajax请求中列出的网址:

PATCH  /tasks/:id/complete(.:format)

1 个答案:

答案 0 :(得分:1)

我的身份在哪里?

  

$.ajax({url: 'tasks#complete'

您似乎在这里使用Rails的路由语法。这些都不是有效的网址。您的网址必须如下所示:

 url: "/tasks/1/complete"

当然,数字应该是动态的。 (提示:只需获取表单的action属性并将其用作url)。

如何在这里正确地做事?

在那里看到remote: true?这意味着您无需手动处理提交点击。它会为你执行ajax。您只需要创建一个JS视图,在项目完成时您将执行任何操作。

 // views/tasks/complete.js.erb
 $('#task-<%= @task.id %>').addClass('completed')

Michael Hartl的rails 14.2.5部分涵盖了几乎所有这样的场景:ajax支持的按钮可以改变某些内容,并且必须在页面上反映出更改。