2011-04-22 28 views
0

我设置了has_many:通过与连接模型上的位置列关联,这样我就可以保存演习列表。但是现在我正在寻找与控制器中的这些对象进行交互的最佳方式。使用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 
+0

有人可以解释我在这里发生了什么? – fl00r 2011-04-22 19:28:30

回答

0

您应该主要使用钻取,drill_list只是一个中间模型,只有当它包含一些额外的数据时才应该使用。

要保持位置,您可以有一个索引值,但它可能不是那么高效。相反,如果位置是基于时间的,那么您可以按时间顺序并获得较新或较旧的演习。

+0

谢谢。所以我认为我需要位置列,因为我想要重新排列列表的能力。我想重新排列钻孔阵列并让模型负责更新位置。我希望有一个rails默认处理,但我想我会尝试在过滤器之前处理它。 – jspooner 2011-04-22 22:20:26

+0

是的,我认为使用位置属性对于这一个会是更好的主意。 – Spyros 2011-04-23 02:33:55

0

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

作为列表的行为也应该有助于维持职位而不需要太多工作。

相关问题