Ruby on rails Can';t让这个IF语句正常工作-Rails

Ruby on rails Can';t让这个IF语句正常工作-Rails,ruby-on-rails,Ruby On Rails,我试图使它不会显示页面,除非该资产属于某个用户项目(以阻止其他人查看任何内容)。由于某些原因,我无法让它工作,因为它当前正在渲染else部分,而它应该在渲染资源 def show @website = Asset.find(params[:id]) ##Add if statement so only current users can view if @website.project_id == current_user.projects.all.e

我试图使它不会显示页面,除非该资产属于某个用户项目(以阻止其他人查看任何内容)。由于某些原因,我无法让它工作,因为它当前正在渲染else部分,而它应该在渲染资源

    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
你知道我哪里出了问题吗?

试试使用

 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}
将返回项目数组。因此,您将永远无法将项目id与数组进行比较

相反,您需要一个
项目id
数组,然后查找所需的
项目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
通过这种方式,我们的期望结果直接从数据库中获取,我们不需要进行太多的比较或评估

尝试使用

 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}
将返回项目数组。因此,您将永远无法将项目id与数组进行比较

相反,您需要一个
项目id
数组,然后查找所需的
项目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
通过这种方式,我们的期望结果直接从数据库中获取,我们不需要进行太多的比较或评估

尝试使用

 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}
将返回项目数组。因此,您将永远无法将项目id与数组进行比较

相反,您需要一个
项目id
数组,然后查找所需的
项目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
通过这种方式,我们的期望结果直接从数据库中获取,我们不需要进行太多的比较或评估

尝试使用

 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}
将返回项目数组。因此,您将永远无法将项目id与数组进行比较

相反,您需要一个
项目id
数组,然后查找所需的
项目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

通过这种方式,我们的期望结果直接从数据库中获取,我们不需要进行太多的比较或评估

如果“一个id”=“某个数组”?那看起来是不是。。错了吗?另外,请注意,它返回原始数组对象,而不是
#map
,并且通常仅用于副作用。如果“an id”=“some array”?那看起来是不是。。错了吗?另外,请注意,它返回原始数组对象,而不是
#map
,并且通常仅用于副作用。如果“an id”=“some array”?那看起来是不是。。错了吗?另外,请注意,它返回原始数组对象,而不是
#map
,并且通常仅用于副作用。如果“an id”=“some array”?那看起来是不是。。错了吗?另外,请注意,返回原始数组对象,而不是
#map
,并且通常仅用于副作用。
#pull
(以及中间可枚举项)可以用Yes跳过。我们可以。但使用勇气比任何其他方法都更有效。对于任何第一次,我们都将获取所有记录,然后循环所有记录。Pull将仅从数据库返回id。谢谢你的回答!工作得很有魅力。我编辑它只是为了再次包含第一行,因为它给了我一个没有它的错误。但再次感谢
#pulk
(以及中间可枚举项)可以用Yes跳过。我们可以。但使用勇气比任何其他方法都更有效。对于任何第一次,我们都将获取所有记录,然后循环所有记录。Pull将仅从数据库返回id。谢谢你的回答!工作得很有魅力。我编辑它只是为了再次包含第一行,因为它给了我一个没有它的错误。但再次感谢
#pulk
(以及中间可枚举项)可以用Yes跳过。我们可以。但使用勇气比任何其他方法都更有效。对于任何第一次,我们都将获取所有记录,然后循环所有记录。Pull将仅从数据库返回id。谢谢你的回答!工作得很有魅力。我编辑它只是为了再次包含第一行,因为它给了我一个没有它的错误。但再次感谢
#pulk
(以及中间可枚举项)可以用Yes跳过。我们可以。但使用勇气比任何其他方法都更有效。对于任何第一次,我们都将获取所有记录,然后循环所有记录。Pull将仅从数据库返回id。谢谢你的回答!工作得很有魅力。我编辑它只是为了再次包含第一行,因为它给了我一个没有它的错误。但再次感谢!