ruby-on-rails - 当使用 update_attributes 更新资源时,acts_as_list 是否应该自动重新排序项目?

标签 ruby-on-rails sorting ruby-on-rails-3.1 ruby-on-rails-plugins acts-as-list

我在 rails 3.1 中使用 acts_as_list 插件,每当我添加或删除资源时,现有位置都会被排序和更新。但是,当使用 update_attributes 更新资源的位置时,似乎没有发生重新排序,我可能会留下具有重复位置的资源。这是 acts_as_list 的正确行为吗?

我搜索了相关说明,但有关此插件的文档非常有限。

我在这个阶段没有使用 javascript,位置只是用一个范围适当限制的选择框来确定。

谢谢

最佳答案

更新对象时,插件中没有任何内容会被调用。您必须使用 acts_as_list 提供的内置方法手动执行此操作。

此插件的 ruby​​ 文件只有 300 行且易于理解,它会告诉您有关 acts_as_list 的所有信息...老实说,内容并不多:https://github.com/swanandp/acts_as_list/blob/master/lib/acts_as_list/active_record/acts/list.rb

要手动执行此操作,只需获取位置高于当前项目的所有项目并递增每个项目。这就是我在我的应用程序中处理它的方式(不使用 acts_as_list 但概念在那里)。这是订购论坛的示例:

forum.rb

PositionOptions = [["First Forum", "-1"]] + all.map{|forum| ["After #{forum.subject}", forum.position]}

attr_accessor :position_before
  before_save :set_position, :if => "position_before.present?"
    def set_position
      self.position = position_before.to_i + 1
    end

  after_save :do_positions, :if => "position_before.present?"
    def do_positions
      Forum.where('position >= ? AND id != ?', position, id).order('position, updated_at DESC').all.each_with_index do |forum, index|
        forum.update_attribute('position', position + index + 1)
      end
    end

查看

<% position_options = Forum::PositionOptions %>
<%= f.select :position_before, position_options.reject {|forum| @forum.position == forum[1]}, :selected => position_options[position_options.index {|p| p[1] == @forum.position} - 1][1] %>

也许不是最好的方法,但这是我能想到的最好的方法。如果您计划经常更新位置,或者如果有很多对象被定位,它可能会太昂贵......但它适用于像论坛这样的小型集合。

关于ruby-on-rails - 当使用 update_attributes 更新资源时,acts_as_list 是否应该自动重新排序项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7767457/

相关文章:

ruby-on-rails - 在 XML 响应中返回错误消息

ruby-on-rails - 使用 rails 和backbone.js 使我的应用程序更加干燥

ruby-on-rails - 在同一个ec2实例中同时运行Docker和Jekyll

html - 更改 Html.erb 中 Ruby 变量的值

ruby-on-rails - 使用 CanCan 基于连接表中的一个角色授权 Rails 4 上的用户

php - 根据另一个数组对多维数组进行排序

python - 创建基于散列的排序算法

iphone - 按递增顺序对数组进行排序

ruby-on-rails - Rails 中的加密和解密算法

ruby-on-rails-3.1 - 如何访问 Rails 3.1 中的图像?