Ruby on Rails: почему мой набор массивов содержит нуль, минуя мою проверку ноль? - PullRequest
0 голосов
/ 29 июня 2018

У меня есть код, который выглядит так:

*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

Первоначально в базе данных, он имеет следующие идентификаторы актеров:

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

.pluck и .uniq выделяют избыточные идентификаторы из каждой студии, однако [] все еще существует:

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

Почему мое условие && (!actor.nil?) не улавливает нулевые идентификаторы и не превращает его в отдельный объект?

Редактировать: return actor_list.compact также не работает

1 Ответ

0 голосов
/ 29 июня 2018

вы можете проверить 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

Тогда вы не получите ни одного пустого массива, подобного этому [].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...