Ruby on rails 针对用户特定结果的Rails模型设计

Ruby on rails 针对用户特定结果的Rails模型设计,ruby-on-rails,database-design,model,ruby-on-rails-5,rails-activerecord,Ruby On Rails,Database Design,Model,Ruby On Rails 5,Rails Activerecord,我目前有两种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 类作业

我目前有两种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
类作业
我正在努力实现一个特定的申请人(用户),我可以提供一份工作清单。每个作业应与一个或零个JobInterest实例关联(针对该特定用户)

我想了多种方法来实现这一点,但似乎都有点麻烦

可能的解决方案1:

基本上使用左外连接,例如

Job.includes(:Job\u interests)。其中(Job\u interests:{申请人id:[当前申请人id,无]})。全部

这将产生一个作业列表,每个作业都有一个名为
job\u interests
的属性,该属性应该有一个项目或没有项目。如果申请人表示有兴趣,则为一,如果申请人未表示有兴趣,则为无

缺点:这似乎不是最直接的方法

可能的解决方案2:

创建职务时,自动为属于此职务的所有申请人创建职务兴趣。考虑到很多应用程序,这不能很好地扩展,需要很多额外的行。 另一方面,现在可以通过调用

JobInterest.where(申请人id:当前申请人id)。全部
,这似乎比以前的方法更干净


你会选择这些方法中的任何一种,或者建议另一种我没有想到的方法。

因此根据我在你问题中的评论,我认为这只是一个简单的
方法:通过关联。
用户
有许多工作兴趣,而
工作
有许多感兴趣的
用户

class JobInterest < ApplicationRecord
  belongs_to :user
  belongs_to :Job
end

class User < ApplicationRecord
  has_many :jobinterests, dependent: :destroy
  has_many :jobs, :through => :jobinterests
end

class Job < ApplicationRecord
  has_many :jobinterests, dependent: :destroy
  has_many :users, :through => :jobinterests
end
class JobInterest:工作兴趣
结束
类作业<应用程序记录
有多少:JobEquisites,dependent::Demove
拥有多个:用户,:通过=>:JobInterest
结束

这样,您只需在查看工作兴趣时将其添加到工作兴趣中,并在用户选择退出工作时将其从列表中删除。

那么您想要一个与申请人具有相同工作兴趣(至少一个)的工作列表吗?@BillyFerguson不完全是这样,这里的JobInterest实例基本上意味着某人对某个工作感兴趣(广告),基本上是对招聘广告的回应。所以在我的客户端(应用程序)我想基本上显示一个列表,其中包含所有申请人没有申请的工作,以及他已经申请的工作,以及与他们已经申请的工作有相同兴趣的工作?@BillyFerguson不完全是。假设我是申请人,我在我的应用程序中查看一份工作。然后通过创建一个JobIntere来标记他对该工作感兴趣该特定工作的st实例。例如,一个工作实例可以有许多工作兴趣,每个申请者一个。谢谢你的回答。那么你是建议当我提交一份工作列表时,我为那些尚未获得该用户工作兴趣的工作创建工作兴趣?是的,还是提供一份工作列表,允许申请者
偏好te
或指定对作业的兴趣。因此,不要将所有兴趣都添加到兴趣中。只添加他查看的或他单击“收藏”的兴趣。我将把实现留给你。但这有意义吗?是的,所以请提供一个列表,当用户进入“详细信息”视图时创建JobInterest。谢谢你的想法,我将等待其他人的答复在我将某项工作标记为“答案”之前,请先回答。如果你愿意,请为分数投票!我认为这是你追求的最直接的方法。还有一点需要考虑的是,在我的应用程序中,在所有工作的列表中,我确实希望以某种方式表明该工作已经“受欢迎”(使用你的词汇)。但您可能只需查看某个作业的JobInterests,然后为当前用户选择一个(例如,job.job_interests.where(user_id:1).first))