Ruby on Rails:为什么我的数组集包含null并通过null检查器?

时间:2018-06-29 10:10:46

标签: ruby-on-rails-3

我有一个看起来像这样的代码:

*movie_requests is a scope

def self.records (producer_id = 0)
  actor_list = Array.new
  movie_requests(producer_id).find_each do |studio|
    actor = studio.actors.pluck(:id).uniq
    if (!actor_list.include? actor) && (!actor.nil?)
      actor_list << actor
    end
  end
  return actor_list
end

最初在数据库中,它具有以下参与者ID:

[[12305], [3749], [1263], [], [], [1263], [], [12305], []]

.pluck和.uniq使每个工作室的冗余ID不同,但是[]仍然存在:

[[12305], [3749], [1263], []]

为什么我的&& (!actor.nil?)条件没有捕获空ID并使其成为不同的对象?

  

编辑:return actor_list.compact也无效

1 个答案:

答案 0 :(得分:0)

您可以检查actor是否存在,然后将此actor添加到actor_list

为什么您的!actor.nil?在这里是原因:

actor = []
actor.nil? #gives you false
!actor.nil? #gives you true

以及!actor_list.include? actor也为您提供了真实的 因此,您的两个条件都成立,因此将其输入if条件并将[]附加到您的actor_list

您可以执行以下操作:

def self.records (producer_id = 0)
  actor_list = Array.new
  movie_requests(producer_id).find_each do |studio|
    actor = studio.actors.pluck(:id).uniq
    if actor.present? && (!actor_list.include? actor)
      actor_list << actor
    end
  end
  return actor_list
end

那么您将不会得到像这样的任何空白数组[]。