【发布时间】:2014-04-30 04:35:24
【问题描述】:
我有以下资源关系:
Class Course < ActiveRecord::Base
has_many :track_courses
has_many :tracks, through: :track_courses
end
以及 Track 模型内部的镜像关系。连接这些模型的 TrackCourse 表有以下几行:
id:主键
track_id:代表轨道
course_id:代表课程
位置:该轨道内课程的顺序
我想让管理员用户能够通过 ajax 更新每个轨道中的课程。我在前端有一个列表,它作为哈希传递给控制器:
front_end_list = { course_id => position }
表示对象及其在前端可排序的位置。
我也在查找该轨道中现有课程的列表:
existing_courses = TrackCourse.where("track_id = ?", track_id).all
目标:比较这两个列表,根据前端列表同步数据库条目。本质上,如果用户将课程 15 插入网页上的位置 2,我需要将该条目插入 TrackCourse 表(如果它不存在)或更新它的位置(如果它存在)。反之亦然。
这样做的最佳方法是什么? ActiveRecord/ActiveRelation 是否为它提供方法?还是我必须自己写点东西?
更新:我发现了一个名为 acts_as_list 的 gem,但它似乎是为 ActiveRecord 表设计的,而不是为 ActiveRelation 设计的。它本质上期望位置值是唯一的,而在 TrackCourse 中可以有多个具有相同位置的课程(在不同的轨道上)。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 rails-activerecord