首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查找两个可枚举之间是否存在id

如何查找两个可枚举之间是否存在id
EN

Stack Overflow用户
提问于 2013-11-22 08:25:28
回答 1查看 67关注 0票数 0

我被困在这个问题上了。我有四种模式,乔布斯,用户,简历,应用程序

协会如下

每个用户都有许多作业和应用程序。

每个作业属于一个用户

每个简历都属于一个用户。

每项工作都有许多应用程序。

我需要限制招贴画只能查看自己的简历(因为他也可以是申请人)和申请人的简历谁已经申请的任何职位张贴。

我可以限制用户查看自己的简历

代码语言:javascript
复制
if current_user.id == @resume.id

但无法找到在当前用户发布的所有作业上应用的用户的所有简历ids (因为两者都是可枚举的)。

我只需要查找登录用户想查看的简历id是他自己的还是在(存在吗?)在他发布的所有职位的申请中

需要帮助..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-22 10:02:50

User#has_one :简历

首先,我认为你有一个错误,这里:

代码语言:javascript
复制
if current_user.id == @resume.id

这不能工作,因为current_user是用户,@简历是简历,所以它们的id不匹配。

您需要添加User#has_one :resume并使用:

代码语言:javascript
复制
if current_user.resume.id == @resume.id

Job#has_many :简历,通过::应用程序

然后,您需要使用多通关系

代码语言:javascript
复制
class Job
  belongs_to :user
  has_many :applications
  has_many :resumes, through: :applications
end

这样你就可以做:

代码语言:javascript
复制
job.resumes

并检索当前职务的所有简历,对该职务的申请进行筛选。

查找ids

现在,要使所有简历的当前用户简历id和id与工作挂钩,您可以这样做:

代码语言:javascript
复制
[ current_user.resume.id ] + current_user.jobs.includes( :resumes ).references( :resumes ).map { |job| job.resumes.map( &:id ) }.flatten

current_user.jobs.includes( :resumes ).references( :resumes )加载用户的作业,并在查询中预加载恢复。

.map { |job| job.resumes.map( &:id ) }检索简历ids。

.flatten将数组缩减为一个维度,因为您将为每个作业拥有一个ids数组,否则。

最后,我们将这个数组与包含当前用户的简历id的数组连接起来。

检查当前恢复id

现在您已经拥有了所有这些,您只需要检查当前的简历id是否包含在该数组中:

代码语言:javascript
复制
relative_resumes = [ current_user.resume.id ] + current_user.jobs.includes( :resumes ).references( :resumes ).map { |job| job.resumes.map( &:id ) }.flatten
if relative_resumes.include? @resume.id
  # profit !
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20140203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档