结合使用Ajax和rails update_attributes

奥列克桑德·弗洪

我在使用带有Rails方法update_attributes的ajax时遇到问题。在js.coffee文件中,我正在发送一个ajax来计算控制器方法。这个ajax很简单,看起来像这样:

            $.ajax({
                url: 'tasks/update_data',
                type: 'POST',
                data: { swap: $.cookie("swap") }
            });

我想做的是刷新页面后保存行交换。这就是我的控制器方法应该做的。当我调试该方法时,就会发生这种情况:如果我交换一次,一切都很好;当我交换两次并向控制台输出值时,它的输出类似于此first <=> second,second <=> first,但是它必须首先输出second <second>,second << >>。因此,我认为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: '/' } )谢谢回答。

理查德·派克(Richard Peck)

MVC

您的控制器可能会更好:

#app/controllers/tasks_controller.rb
class TasksController < ApplicationController
   def update_data
      ids = params[:swap].split('&')

      row1 = Task.find ids.first
      row2 = Task.find ids.last

      row1.update row2
      row2.update row1
   end
end

根据经验,切勿puts在控制器中包含直接输出()。Rails是MVC-意味着所有“输出”都应放置在您的中views在渲染“无”的同时,您应该将其真正转化为对视图/控制器的某种响应

--

阿贾克斯

当您调用ajax请求时,就像调用“正常”请求一样。即使您不想收到回应,您仍然需要以相同的方式处理它们

我的意思是,如果您想接收成功或错误回调,则需要执行以下操作:

#app/controllers/tasks_controller.rb
class TasksController < ApplicationController
   def update_data
       ...
       @message = "Success"
       respond_to do |format|
          format.js #-> app/views/tasks/update_data.js.erb
       end
   end
end

#app/views/tasks/update_data.js.erb
alert("<%=j @message %>");

--

使固定

为了解决您的问题,我建议您退后一步,考虑您要实现的目标。您提到您要交换行位置-为什么不只positionTask模型中创建一个属性

这将允许您执行以下操作:

#app/controllers/tasks_controller.rb
class TasksController < ApplicationController
   def update_data
      ids = params[:swap].split('&')

      @row1 = Task.find ids.first
      @row2 = Task.find ids.last

      @row1.update_attributes(position: @row2.position)
      @row2.update_attributes(position: @row1.position)

      #response here
   end
end

我写这篇文章的原因是因为您的应用程序需要面向对象-意味着每条记录都必须独立于其他任何记录进行存储

这很重要的原因是因为您当前正在尝试操纵objects自己-从字面意义上“交换”它们。这是荒谬的和低效的-你会多少更适用于只是改变了各个对象的“位置” -按要求让你只需要改变的对象

关于您第二次通话的问题-您需要更新您的$.cookie("swap")值才能使其正常运行

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails update_attributes无法正常工作

来自分类Dev

Rails 3 update_attributes用于数组

来自分类Dev

当前用户的Rails update_attributes

来自分类Dev

特定关联模型的 Rails update_attributes

来自分类Dev

Rails 4结合使用update_attributes(params.permit)和fix变量

来自分类Dev

update_attribute与update_attributes Rails 4

来自分类Dev

使用has_secure_password的Rails update_attributes

来自分类Dev

Rails回形针:更新vs. update_attributes

来自分类Dev

Rails 4中未定义的方法update_attributes

来自分类Dev

带有动态哈希的Rails update_attributes

来自分类Dev

如何从Rails的update_attributes中排除Null值

来自分类Dev

id为false时的rails migration update_attributes错误

来自分类Dev

Rails未定义方法update_attributes

来自分类Dev

对数组的列类型使用update_attributes

来自分类Dev

使用update_attributes创建了params哈希的ActiveModel :: ForbiddenAttributesError

来自分类Dev

update_attributes在Rails中使用AJAX进行编辑操作失败

来自分类Dev

Rails:是否有update或update_attributes在失败时引发异常?

来自分类Dev

(Rails) update_attributes 在不使用密码的集成测试期间抛出错误(需要密码)

来自分类Dev

我如何做一个Ajax update_attributes?

来自分类Dev

未通过update_attributes方法更新Rails模型的某些属性

来自分类Dev

rails 3:update_attributes不会更新并以422 HTML状态代码响应

来自分类Dev

无法使用update_attributes更新用户个人资料

来自分类Dev

为什么使用update_attributes或save时ActiveRecord会验证Model的所有列

来自分类Dev

未定义的方法“ update_attributes”?

来自分类Dev

update_attributes方法()不正常工作

来自分类Dev

nil:NilClass的未定义方法'update_attributes'

来自分类Dev

红宝石在轨道上,无法将check_box_tag值传递回update_attributes

来自分类Dev

退订方法抛出未定义的方法update_attributes错误

来自分类Dev

Rails使用f.fields_for和AJAX接受_nested_attributes_for

Related 相关文章

  1. 1

    Rails update_attributes无法正常工作

  2. 2

    Rails 3 update_attributes用于数组

  3. 3

    当前用户的Rails update_attributes

  4. 4

    特定关联模型的 Rails update_attributes

  5. 5

    Rails 4结合使用update_attributes(params.permit)和fix变量

  6. 6

    update_attribute与update_attributes Rails 4

  7. 7

    使用has_secure_password的Rails update_attributes

  8. 8

    Rails回形针:更新vs. update_attributes

  9. 9

    Rails 4中未定义的方法update_attributes

  10. 10

    带有动态哈希的Rails update_attributes

  11. 11

    如何从Rails的update_attributes中排除Null值

  12. 12

    id为false时的rails migration update_attributes错误

  13. 13

    Rails未定义方法update_attributes

  14. 14

    对数组的列类型使用update_attributes

  15. 15

    使用update_attributes创建了params哈希的ActiveModel :: ForbiddenAttributesError

  16. 16

    update_attributes在Rails中使用AJAX进行编辑操作失败

  17. 17

    Rails:是否有update或update_attributes在失败时引发异常?

  18. 18

    (Rails) update_attributes 在不使用密码的集成测试期间抛出错误(需要密码)

  19. 19

    我如何做一个Ajax update_attributes?

  20. 20

    未通过update_attributes方法更新Rails模型的某些属性

  21. 21

    rails 3:update_attributes不会更新并以422 HTML状态代码响应

  22. 22

    无法使用update_attributes更新用户个人资料

  23. 23

    为什么使用update_attributes或save时ActiveRecord会验证Model的所有列

  24. 24

    未定义的方法“ update_attributes”?

  25. 25

    update_attributes方法()不正常工作

  26. 26

    nil:NilClass的未定义方法'update_attributes'

  27. 27

    红宝石在轨道上,无法将check_box_tag值传递回update_attributes

  28. 28

    退订方法抛出未定义的方法update_attributes错误

  29. 29

    Rails使用f.fields_for和AJAX接受_nested_attributes_for

热门标签

归档