【发布时间】:2018-03-30 08:36:43
【问题描述】:
我目前有两个 Rails 模型如下:
class Job < ApplicationRecord
has_many :job_interests
end
class JobInterest < ApplicationRecord
belongs_to :job
belongs_to :applicant
enum status: { pending: 0, accepted: 1, rejected: 2, cancelled: 3 }
end
我正在尝试为特定申请人(用户)实现这一目标,我可以提供一份工作列表。每个 Job 应与一个或零个 JobInterest 实例相关联(针对该特定用户)。
我想了多种方法来实现这一点,但似乎都有些麻烦。
可能的解决方案 1:
基本上使用左外连接,例如
Job.includes(:job_interests).where(job_interests: { applicant_id: [current_applicant.id, nil] }).all
这会产生一个作业列表,每个作业都有一个名为job_interests 的属性,该属性应该有一个项目或没有。如果申请人表示有兴趣,则有一个,如果申请人没有这样做,则没有。
缺点:这似乎不是最直接的方法。
可能的解决方案 2:
创建工作时,会自动为属于该工作的所有申请人创建 JobInterests。鉴于很多应用程序,这不能很好地扩展并且需要很多额外的行。 另一方面,现在可以通过调用获取 Job 列表
JobInterest.where(applicant_id: current_applicant.id).all
,这似乎比以前的方法干净得多。
您会选择这些方法中的任何一种,还是建议我没有想到的另一种方法。
【问题讨论】:
-
所以你想要一份与申请人有相同工作兴趣(至少一个)的工作列表?
-
@BillyFerguson 不完全是,这里的 JobInterest 实例基本上意味着有人对某个职位(广告)感兴趣,基本上是对职位广告的回应。所以在我的客户(应用程序)中,我想基本上显示一个列表,其中包含申请人尚未申请的所有工作,以及他已经申请的工作
-
那么与他们已经申请的工作有相同兴趣的工作?
-
@BillyFerguson 不完全是。假设我是一名申请人,我在我的应用程序中查看了一份工作。然后通过为该特定工作创建一个 JobInterest 实例来标记他对该工作感兴趣。例如。一个 Job 实例可以有多个 JobInterest,每个申请人一个。
标签: ruby-on-rails database-design model ruby-on-rails-5 rails-activerecord