Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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 Rails:通过查询/转换获取对象ID数组(用于比较)_Ruby On Rails_Database_Optimization - Fatal编程技术网

Ruby on rails Rails:通过查询/转换获取对象ID数组(用于比较)

Ruby on rails Rails:通过查询/转换获取对象ID数组(用于比较),ruby-on-rails,database,optimization,Ruby On Rails,Database,Optimization,基本上,我需要数据库中的ID数组 一些背景: 我正在使用复选框向用户呈现对象列表(foo) 如果用户选中该复选框,则在不同的表(条形图)中创建一行 当呈现foo list+复选框时,我想检查bar id数组中是否已经存在任何给定foo的唯一id 我假设在使用复选框呈现foo列表时,获取id数组比查询每个foo实例的数据库要高效得多 想法?如果不清楚,请提前道歉 有什么问题吗?如果您有railshas\u many或has\u和\u属于\u many关联,rails将为您获取id。有关详细信息

基本上,我需要数据库中的ID数组

一些背景:

  • 我正在使用复选框向用户呈现对象列表(foo)
  • 如果用户选中该复选框,则在不同的表(条形图)中创建一行
  • 当呈现foo list+复选框时,我想检查bar id数组中是否已经存在任何给定foo的唯一id
我假设在使用复选框呈现foo列表时,获取id数组比查询每个foo实例的数据库要高效得多


想法?如果不清楚,请提前道歉

有什么问题吗?如果您有rails
has\u many
has\u和\u属于\u many
关联,rails将为您获取id。有关详细信息,请参见,简而言之,它类似于
@order\u id=@customer.order\u id

否则,您可以轻松地使用普通sql(或活动记录查询)。

我使用了映射方法:

@bars = Bar.all(:select => bar.id)
@bars = @bars.map{|bar| bar.id}

然后我得到一个ID数组。而且只有一个查询。

我们也可以这样使用map方法

Model.all.map(&:field_name)

Rails的最新版本支持
Model.pull(:field\u name)


array1
具有表中所有ID的值
Users

我知道有很多等。但是,您再次为每个foo进行关联查询,这似乎不如预取所有条形ID然后进行比较有效。@cbrulak调用“order\u id”时,rails不会对每个结果运行查询。同样,您也可以切换到sql:“从my_table where…”中选择id。这是一种内存效率极低的方法,因为它实例化Ruby内存中的所有
Bar
记录,只是为了得到一列。最好使用
#pulk
例如
Bar.all.pulk(:id)
返回id列表。
array1 = User.all.collect(&:id)