我被困在这个问题上了。我有四种模式,乔布斯,用户,简历,应用程序
协会如下
每个用户都有许多作业和应用程序。
每个作业属于一个用户
每个简历都属于一个用户。
每项工作都有许多应用程序。
我需要限制招贴画只能查看自己的简历(因为他也可以是申请人)和申请人的简历谁已经申请的任何职位张贴。
我可以限制用户查看自己的简历
if current_user.id == @resume.id但无法找到在当前用户发布的所有作业上应用的用户的所有简历ids (因为两者都是可枚举的)。
我只需要查找登录用户想查看的简历id是他自己的还是在(存在吗?)在他发布的所有职位的申请中
需要帮助..。
发布于 2013-11-22 10:02:50
User#has_one :简历
首先,我认为你有一个错误,这里:
if current_user.id == @resume.id这不能工作,因为current_user是用户,@简历是简历,所以它们的id不匹配。
您需要添加User#has_one :resume并使用:
if current_user.resume.id == @resume.idJob#has_many :简历,通过::应用程序
然后,您需要使用多通关系
class Job
belongs_to :user
has_many :applications
has_many :resumes, through: :applications
end这样你就可以做:
job.resumes并检索当前职务的所有简历,对该职务的申请进行筛选。
查找ids
现在,要使所有简历的当前用户简历id和id与工作挂钩,您可以这样做:
[ current_user.resume.id ] + current_user.jobs.includes( :resumes ).references( :resumes ).map { |job| job.resumes.map( &:id ) }.flattencurrent_user.jobs.includes( :resumes ).references( :resumes )加载用户的作业,并在查询中预加载恢复。
.map { |job| job.resumes.map( &:id ) }检索简历ids。
.flatten将数组缩减为一个维度,因为您将为每个作业拥有一个ids数组,否则。
最后,我们将这个数组与包含当前用户的简历id的数组连接起来。
检查当前恢复id
现在您已经拥有了所有这些,您只需要检查当前的简历id是否包含在该数组中:
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 !
endhttps://stackoverflow.com/questions/20140203
复制相似问题