Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从数组返回未包含在记录字段';s结果_Ruby On Rails - Fatal编程技术网

Ruby on rails 从数组返回未包含在记录字段';s结果

Ruby on rails 从数组返回未包含在记录字段';s结果,ruby-on-rails,Ruby On Rails,我有一张表Animal,上面有一个字段specie 物种可以是狗、猫、狮子、鸟、大象……。 我们知道,我们还可以通过以下方式查找所有记录: @animals = Animal.all.where(specie: ["dog", "cat", "lion", "bird", "elephant", ...] ) 假设我有10000个记录和10000个可能的物种可以注册。我只需要一个数组,其中包含数据库中尚未包含的所有物种。我怎样才能以最有效的方式做到这一点呢?假设你在某个地方有一个已知物种的集合

我有一张表
Animal
,上面有一个字段
specie

物种可以是狗、猫、狮子、鸟、大象……。

我们知道,我们还可以通过以下方式查找所有记录:

@animals = Animal.all.where(specie: ["dog", "cat", "lion", "bird", "elephant", ...] )

假设我有10000个记录和10000个可能的物种可以注册。我只需要一个数组,其中包含数据库中尚未包含的所有物种。我怎样才能以最有效的方式做到这一点呢?

假设你在某个地方有一个已知物种的集合:

species=[“狗”、“猫”、“狮子”、“鸟”、“大象”…]
缺失物种=物种-动物。不同。采摘(:物种)

假设你的记忆中某处有一个已知物种的集合:

species=[“狗”、“猫”、“狮子”、“鸟”、“大象”…]
缺失物种=物种-动物。不同。采摘(:物种)

我也同意@chaitanya。在RAM中保留10k字符串根本没有效率。最好创建一个物种表并与动物进行左连接。然后可以排除交叉物种

class Specie
  has_many :animals
  field :name
end

class Animal
  belongs_to :specie
end

Specie.left_joins(:animals).where('animals.id' => nil).distinct.pluck(:name)

我也同意@chaitanya。在RAM中保留10k字符串根本没有效率。最好创建一个物种表并与动物进行左连接。然后可以排除交叉物种

class Specie
  has_many :animals
  field :name
end

class Animal
  belongs_to :specie
end

Specie.left_joins(:animals).where('animals.id' => nil).distinct.pluck(:name)

嗨,谢谢你,但当你做动物。所有。哪里。不(物种:[“狗”,“猫”,“狮子”,“鸟”,“大象])你将找不到任何记录…我认为需要单独制作一个表“物种”并将其与“动物”联系起来嗨,谢谢你,但当你做动物。所有。哪里。不(物种:[“狗”,“猫”,“狮子”,“鸟”,“大象])你将找不到任何记录……我认为需要制作单独的表“物种”,并将其与“动物”联系起来。在这种情况下,你是对的。在我的例子中,我需要一个数组,因为数字10.000只是说我不想创建一个each循环,所以它的性能很慢。在这个场景中,你是对的。在我的例子中,我需要一个数组,因为数字10.000只是说我不想创建一个each循环,所以它的性能很慢。