我设置了一个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
答案 0 :(得分:0)
你应该主要使用练习,drill_list只是一个中间模型,只有在它拥有一些额外的数据时才能使用。
要保持位置,您可以拥有索引值,但效率可能不高。相反,如果该位置是基于时间的,您可以按时间排序并获得更新或更旧的演习。
答案 1 :(得分:0)
我意识到这是一篇非常古老的帖子,但过去对我有用的另一种解决方案是acts_as_list
- https://github.com/swanandp/acts_as_list。它是一个古老的宝石,但它工作得很好,并有一些辅助方法来重新排序元素。
作为列表的行为也应该有助于保持这个位置而不需要做太多工作。