1

我想在我的应用程序中允许拖放重新排序功能。我知道我可以使用acts_as_list 来做到这一点,并且已经遵循了Rails 食谱。但是,由于我的应用程序的构建方式,我想要重新排序的项目不能使用acts_as_list,因为它从另一个模型中的嵌套项目继承了它的位置字段。当我使用acts_as_list时,这似乎覆盖了位置值,这意味着父模型中设置的顺序丢失,子位置是随机的。

所以我想我有两个问题:

我可以在没有 Acts_As_List 的情况下构建 Ajax 样式的拖放重新排序工具吗?

或者

我可以在模型中添加某种 if 语句以在创建时禁用acts_as_list 但在所有其他时间启用?类似的东西(英文而不是代码):

if method = create
  child.position = parent.position
else
  acts_as_list
end
4

3 回答 3

1

排名模型是一个选项。示例用法:

class Duck < ActiveRecord::Base

  include RankedModel
  ranks :row_order

end
于 2012-08-27T12:32:40.890 回答
0

我很确定 jquery UI 有某种插件/模块,无论他们称之为什么,比如可拖动和可排序,那么也许他们有一个成功的方法,你可以使用 ajax 来记录它的位置,这样如果用户在保存之前刷新,它保存它在“列表”中的位置。

于 2012-05-17T12:23:50.123 回答
0

您可以重写在acts_as_list 中调用的before_save 函数:

class Duck < ActiveRecord::Base

  private

  def add_to_list_bottom
    # leave blank to override default acts_as_list before_save function
  end

end
于 2012-12-10T18:31:58.643 回答