无法使用此IF语句 - Rails

时间:2014-06-07 05:20:41

标签: ruby-on-rails

我正在努力使它不会显示页面,除非该资产属于其中一个用户项目(为了阻止其他人查看任何内容)。出于某种原因,我不能让它工作,因为它正在渲染其他部分应该在渲染资产时。

    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

关于我哪里出错的任何想法?

1 个答案:

答案 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

这样我们期望的结果直接从数据库中提取,我们不需要比较或评估太多。