使用has_many:through创建有序列表



我设置了一个has_many:通过与连接模型上的位置列的关联,所以我可以保存演练列表。但现在我在寻找与控制器中这些对象交互的最佳方式。

我应该调用Activity.drills还是Activity.drill_list来获取有序列表?

保持位置的最好方法是什么?我必须手动更新DrillList中的所有位置吗?

class Drill < ActiveRecord::Base
  has_many :drill_list, :order => "position"
  has_many :activities, :through => :drill_list, :order => "position"
end
class DrillList < ActiveRecord::Base
  belongs_to :activity
  belongs_to :drill
end
class Activity < ActiveRecord::Base
  has_many :drill_list, :order => "position", :dependent => :destroy
  has_many :drills, :through => :drill_list, :order => "position"  
end

你应该主要使用drill, drill_list只是一个中间模型,只有当它保存一些额外的数据时才应该使用。

为了保持位置,你可以有一个索引值,但它可能不是那么有效。相反,如果位置是基于时间的,你可以按时间排序,获得新的或旧的钻头。

我意识到这是一个相当老的帖子,但另一个解决方案,已经很好地为我在过去是acts_as_list - https://github.com/swanandp/acts_as_list。这是一个古老的宝石,但它工作得很好,并且有一些帮助方法来重新排序元素。

Acts as list也可以帮助你保持位置,而不需要你做太多的工作。

相关内容

  • 没有找到相关文章

最新更新