Rails 3.1 - 拖放Drop没有acts_as_list的重新订购?

时间:2012-05-17 10:23:40

标签: ruby-on-rails ajax ruby-on-rails-3 acts-as-list

我想在我的应用程序中允许拖放重新排序工具。我知道我可以使用acts_as_list执行此操作,并且已经遵循了Rails Recipe。但是,由于我的应用程序的构建方式,我想要重新排序的项目不能使用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

3 个答案:

答案 0 :(得分:1)

ranked-model是一个选项。用法示例:

class Duck < ActiveRecord::Base

  include RankedModel
  ranks :row_order

end

答案 1 :(得分:0)

我很确定jquery UI有一些插件/模块,无论他们为此调用它们都像draggable and sortable那样也许他们有一个成功的方法,你可以使用ajax来记录它的位置,这样如果用户在保存之前刷新,它会将其保存在“列表”中。

答案 2 :(得分: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