【问题标题】:How to save the row order position in ranked model gem如何在排名模型宝石中保存行顺序位置
【发布时间】:2014-10-25 09:23:44
【问题描述】:

我正在使用ranked model gem 并跟随 sortable tables tutorial

我有任务模型。

task.rb

include RankedModel
ranks :row_order

路线

 resources :tasks do
 post :update_row_order, on: :collection

tasks_controller.rb

  def update_row_order
   @task = Task.find(params[:task][:task_id])
   @task.row_order_position = params[:task][:row_order_position]
   @task.save
   render nothing: true 
  end

Ajax

$.ajax(
      type: 'POST'
      url: '/tasks/update_row_order'
      dataType: 'json'
      data: { task: {task_id: item_id, row_order_position: position } }

拖动任务后

追踪

Parameters: {"task"=>{"task_id"=>"141", "row_order_position"=>"0"}}

在表中,我有列 row_order,其中保存了一些随机值,例如 row_order = -8343750。 是否可以将row_order_position 保存在数据库中。比如 1、2、3。

【问题讨论】:

    标签: jquery ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    我相信这就是排名模型的工作原理。如果你想要像 1,2,3 这样的数字,你应该使用acts_as_lists。不过排名模型更有效。

    这就是它的工作原理

    Ranked-model 只对中的项目执行更新操作 题。它通过创建一个中间的排名数字来实现这一点 在两个邻居之间,这些数字分布在一个非常 大范围; -8388607 到 8388607(签名的 MEDIUMINT 的范围在 MySQL。

    如果在一个列表上重新排序几千次后有 实际上与排名数字重叠,或者它们最终超出范围? 好吧,在这种罕见的情况下,整个表格都会被更新。

    【讨论】:

      【解决方案2】:

      (以下不是对上述问题的确切答案,而是假设您希望保存任务以便以后能够检索它。它也可用于相对于另一个任务定位任务。)

      不建议使用 RankedModel 在数据库中保存 row_order_position。排名模型方法的主要优点是您不需要保存所有在您编辑后的 ​​row_order_positions。

      如果您想将其保存到数据库以便能够轻松确定特定任务的 row_order_position,您可以执行以下操作:

      class Plan < ActiveRecord::Base
      
      include RankedModel
      ranks :row_order
      
      def calculated_row_order_position
        self.siblings.where('row_order < ?', self.row_order).count + 1
      end
      

      这是基于here 找到的帖子,该帖子基于this post。我添加了“+ 1”以获取从 1 开始任务计数的行位置。上面的解决方案假设您使用 ancestry 在树结构中组织任务 ancestry 使用 .sibling 来获取所有兄弟姐妹。

      通过添加方法 computed_row_order_position,无需保存 row_order_position 即可轻松获取任务的位置。

      如果我没记错的话,您现在可以决定在您的数据库上更容易做的事情: 1.保存您在保存时更改位置的任务之后的所有任务的更改位置(作为列表是您的最佳选择)。 要么 2. 在需要确定特定任务的row_order_position时查询兄弟任务的row_order(选择排名模型gem)。

      如果我遗漏了任何内容,或者上述行为列表模型和排名模型之间的比较不正确,请告诉我。

      【讨论】:

        猜你喜欢
        • 2011-11-25
        • 2016-05-20
        • 1970-01-01
        • 2011-11-26
        • 1970-01-01
        • 2016-05-13
        • 1970-01-01
        • 1970-01-01
        • 2015-07-08
        相关资源
        最近更新 更多