我在rails方法update_attributes中使用ajax时遇到了问题。在js.coffee文件我送一个AJAX来计算控制器method.This Ajax是简单的,看起来像这样:在rails中使用Ajax update_attributes
$.ajax({
url: 'tasks/update_data',
type: 'POST',
data: { swap: $.cookie("swap") }
});
我试图做的是保存排掉期清爽页之后。这就是我的控制器方法应该做的事情。当我调试这个方法时,会发生什么事情:如果一旦一切正常,我就交换;当我交换两次并输出值到控制台时,它的输出类似于这第三个< =>第二个,第二个< =>第一个,但它必须先完成第三个< =>第二个,第三个< =>。所以我认为在db的更新机制方面存在一些问题,我不明白它为什么会以这种方式工作。在此之间,在任何时候,当update_attributes被调用时,它都会返回true,所以不会失败db的更新。这是控制方法的样子:
def update_data
ids = params[:swap].split('&')
puts ids
puts "--------------------------------------------------"
row1 = Task.where(id: ids[0]).first
row2 = Task.where(id: ids[1]).first
puts "first: " + row1.name
puts "second: " + row2.name
temp_hash1 = { name: row1.name, status: row1.status, project_id: row1.project_id, dead_line: row1.dead_line }
temp_hash2 = { name: row2.name, status: row2.status, project_id: row2.project_id, dead_line: row2.dead_line }
k = row1.update_attributes(temp_hash2)
puts "first: " + row1.name
puts k
m =row2.update_attributes(temp_hash1)
puts "second: " + row2.name
puts m
render nothing: true
end
cookie值: $.cookie("swap", $.cookie("swap") + row_id + "&" + prev_row_id, { path: '/' })
。 感谢您的回答。
我很感谢您的回答。我使用“puts”只是为了了解发生了什么。 Thx为了让这段代码更好看,我认为由于我的经验不足,我仍然编写不好的代码。现在关于你的修复:我不明白,为什么你需要创建行的实例,也许是因为我来自像C++这样的系统语言,并且最好是由于内存或者我不明白的地方做局部变量。你建议在数据库'位置'创建另一列,然后按位置排序,它是更有效的,但有点复杂,然后只是update_attr,它是有道理的。然后总结 - > – 2014-08-27 11:21:59
嘿谢谢评论!我猜你是本地开发人员或Ruby开发人员。如果你想在Rails中测试,你可以使用'Rails.logger.info(“你的输出在这里)''。 – 2014-08-27 11:24:03
最后,我需要总是把respond_to当我有ajax调用,在db中创建位置,按db排序,cookie值很容易改变,并把所有的渲染东西放在视图中,我是在正确的方向思考? – 2014-08-27 11:24:49