我想在我的应用程序中允许拖放重新排序工具。我知道我可以使用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
答案 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