2010-09-03 75 views
2

基本上,我想從數據庫中獲得一個ID數組。Rails:通過查詢/轉換獲得一個對象ID數組

一些背景資料:

  • 我渲染OBJETS(FOOS)與一個複選框用戶列表。
  • 如果用戶選中一個行在不同的表中創建(bar)
  • 當呈現foo list +複選框時我想檢查唯一id是否已經存在於條形ID數組中。

我認爲,使用複選框呈現foo列表時,獲取數組的id將比使用複選框呈現foo列表時查詢foo的每個實例的數據庫效率高得多。

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

回答

8

我使用的地圖方法:

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

然後我結束了ID的數組。只有一個查詢。

1

這是什麼問題?如果您有導軌has_manyhas_and_belongs_to_many關聯,則導軌將爲您提取ID。詳情請參閱relevant tutorial,簡而言之就像@order_ids = @customer.order_ids

否則,你可以很容易地使用普通的sql(或活動記錄查詢)。

+0

我知道has_many等。但是,再次,您正在爲每個foo進行關聯查詢,這看起來並不像預取所有條形碼ID然後進行比較那樣有效。 – cbrulak 2010-09-03 14:27:40

+0

@cbrulak當您調用'order_ids'時,rails不會爲每個結果運行查詢。而且,您可以隨時切換到sql:「從my_table中選擇ID,其中......」。 – 2010-09-03 14:45:11

13

我們可以使用地圖方法也是這樣

Model.all.map(&:field_name) 
2

最近的Rails的版本都支持Model.pluck(:field_name)

1
array1 = User.all.collect(&:id) 

array1在表中Users所有ID的值。