Ruby on Rails ActiveRecord 任务属于公司和has_many用户



我是Ruby on Rails的新手,想知道这是否是一个很好的设置,或者是否有更好的配置。

背景:该系统将用于将任务分配给用户,跟踪分配者,并允许为多个人分配任务。

创建公司模型、用户模型、任务模型和user_tasks模型。
公司类别
has_many :用户
has_many :任务

用户类
belongs_to :公司
简介has_many :user_tasks
has_many :任务,通过: :user_tasks

任务类
belongs_to :公司
简介has_many :user_tasks
has_many :用户,通过: :user_tasks

用户任务类
belongs_to :用户
belongs_to :任务
*带布尔值的轨道分配器

我认为这是完美的。与has_and_belongs_to_many关联相比,具有has_many (model1), through: (model2)关联有一个很大的优势,即您可以通过 ActiveRecord 查询接口(UserTask.where()UserTask.find_by(user_id: 1)等)访问联接模型(UserTasks您的情况)。直接查询联接表有时会缩短查询时间。如果你使用has_and_belongs_to_many关联,你将拥有一个数据库表,如果不求助于SQL,你就无法在Rails中直接访问它。

你可能不需要UserTasks类,如果它只是一个habtm表。 因此,只需为该表创建迁移,但跳过添加模型。 然后在User,做has_and_belongs_to_many :tasks,在Taskhas_and_belongs_to_many :users

我看到的另一件事是,公司是为任务和用户设置的。 您可能有业务规则来说明为什么必须这样做,但如果没有,您可能只能说Company -> has_many :tasks, through: :users

我更喜欢:has_many, :through而不是has_many_and_belongs_to_many或HABTM。 例如,我可以被分配到一个任务两次,一次作为程序员,另一次作为设计师。所以我需要在UserTask列上出现某种"JobDescription"列,我需要两行UserTask表来表示我是任务的程序员,另一行来表示我是任务的设计师。

您希望编写更容易更改的软件,即使HABTM较短,将来也可能会更改软件,例如在同一任务中执行两个子任务的人。请记住,数据库中的行是一段数据,或者"一个东西",如果这有意义的话。至少,你会得到时间戳。

最新更新