使用has_many:through创建有序列表

时间:2011-04-22 15:26:49

标签: ruby ruby-on-rails-3 activerecord

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

我应该拨打Activity.drillsActivity.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

2 个答案:

答案 0 :(得分:0)

你应该主要使用练习,drill_list只是一个中间模型,只有在它拥有一些额外的数据时才能使用。

要保持位置,您可以拥有索引值,但效率可能不高。相反,如果该位置是基于时间的,您可以按时间排序并获得更新或更旧的演习。

答案 1 :(得分:0)

我意识到这是一篇非常古老的帖子,但过去对我有用的另一种解决方案是acts_as_list - https://github.com/swanandp/acts_as_list。它是一个古老的宝石,但它工作得很好,并有一些辅助方法来重新排序元素。

作为列表的行为也应该有助于保持这个位置而不需要做太多工作。