我有一个看起来像这样的代码:
*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
也无效
答案 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
那么您将不会得到像这样的任何空白数组[]。