我正在努力使它不会显示页面,除非该资产属于其中一个用户项目(为了阻止其他人查看任何内容)。出于某种原因,我不能让它工作,因为它正在渲染其他部分应该在渲染资产时。
def show
@website = Asset.find(params[:id])
##Add if statement so only current users can view
if @website.project_id == current_user.projects.all.each { |s| s.id}
@website
else
render(:action => 'blank')
end
end
关于我哪里出错的任何想法?
答案 0 :(得分:3)
尝试使用
def show
@website = Asset.find(params[:id])
if current_user.projects.pluck(:id).include?(@website.project_id)
@website
else
render(:action => 'blank')
end
end
这比你想要达到的要优化得多。
错误是current_user.projects.all.each { |s| s.id}
会返回您的项目数组。因此,您永远无法将project_id与数组进行比较。
相反,您需要一个Project ids
数组,然后查找该数组中是否包含所需的project_id
。
更进一步,我们也可以使用
之类的东西 def show
@website = Asset.find(params[:id])
if current_user.projects.find_by_id(@website.project_id).present?
@website
else
render(:action => 'blank')
end
end
这样我们期望的结果直接从数据库中提取,我们不需要比较或评估太多。