通过AJAX在Rails 3中使用简单链接(link_to)更新模型属性

时间:2013-05-18 19:32:04

标签: ruby-on-rails-3 ujs

作为任务管理应用用户,我想点击任务上的“已完成”链接,将任务的分辨率记录为已完成。

我希望这是一个使用Rails 3方式的Unobtrusive JavaScript(UJS)的AJAX请求。我已经调试了很长一段时间了,所以任何帮助都将不胜感激。

这是我在视图中进行的link_to调用:

<%= link_to "Completed", task_path(:id => task.id, :resolution => "completed"), :remote => true, :method => :put %>

这是我的任务控制器中的更新方法:

class TasksController < ApplicationController
  respond_to :js

  def update
    @task = Task.find(params[:id])
    @task.update_attributes(params[:task])
    respond_with(@task)
  end
end

使用Chrome的开发工具查看网络流量时,看来Put请求正在使用正确的URL,包括URL参数(tasks / {:id}?resolution = completed),但预览显示以下错误消息:

Template is missing

Missing template tasks/update, application/update with {:locale=>[:en], :formats=>[:js, :html], :handlers=>[:erb, :builder, :coffee]}. 

Searched in: * "C:/Documents and Settings/Corey Quillen/My Documents/Software Engineering/Projects/Cleaner Card/cleaner_card/app/views"

2 个答案:

答案 0 :(得分:2)

您需要将分辨率作为任务的属性 - 然后它将更新:

<%= link_to "Completed", task_path(:id => task.id, "task[resolution]" => "completed"), :remote => true, :method => :put %>

在rails 4中 - 首选方法是:补丁更新。

答案 1 :(得分:0)

您需要在update.js.erb中处理更新方法的响应。

将该文件放在app/views/tasks/update.js.erb