我设置了一个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也可以帮助你保持位置,而不需要你做太多的工作。