Ruby on rails Rails:通过查询/转换获取对象ID数组(用于比较)
基本上,我需要数据库中的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。有关详细信息
- 我正在使用复选框向用户呈现对象列表(foo)李>
- 如果用户选中该复选框,则在不同的表(条形图)中创建一行
- 当呈现foo list+复选框时,我想检查bar id数组中是否已经存在任何给定foo的唯一id李>
想法?如果不清楚,请提前道歉 有什么问题吗?如果您有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)