2011-08-02 37 views
2

在Rails 3,我想做到以下幾點:Rails 3的選擇,只有值

SomeModel.where(:some_connection_id => anArrayOfIds).select("some_other_connection_id") 

這工作,但我從DB獲得以下:

[{"some_other_connection_id":254},{"some_other_connection_id":315}] 

現在,這些ID -s是我需要的,但我無法提出一個查詢,只有給我的ID。我不想爲了獲得這些數字而不得不爲了解決這個問題。有沒有什麼辦法,我喜歡的東西要做到這一點:

SomeModel.where(:some_connection_id => anArrayOfIds).select("some_other_connection_id").values() 

是nautre的還是什麼?

我一直在嘗試使用在Git-hub找到的「.select_values()」,但它只返回「some_other_connection_id」。

我不是在軌的專家,所以這個信息可能會有所幫助也:

的「SomeModel」是一個連接表,在我的其他車型之一的許多一對多的關係。所以,我想要做的就是從ID數組中獲取連接另一端的所有條目。基本上我有源代碼,我想從模型中獲取所有目標ID的數據。如果有一種神奇的方式來獲得這些,而不需要我自己做所有的sql(通過活躍記錄的一些幫助),這將非常好!

謝謝:)

+2

你試過:'SomeModel.where(:some_connection_id => anArrayOfIds)。選擇( 「some_other_connection_id」)映射:。some_other_connection_id ' – rubish

+0

不錯。那實際上只返回了ID! :D 這是幹什麼的?它是否通過了resuls,並使用鍵「some_other_connection_id」從hashmap中選擇值?還是它懶加載它? – Automatico

+0

不,它遍歷結果,在這裏沒有延遲加載。抱歉! – rubish

回答

3
SomeModel.where(:some_connection_id => anArrayOfIds).select("some_other_connection_id").map &:some_other_connection_id 

這基本上是一個簡寫:

results = SomeModel.where(:some_connection_id => anArrayOfIds).select("some_other_connection_id") 
results.map {|row| row.some_other_connection_id} 

Array#mapmap方法的細節。

請注意,這裏沒有延遲加載,因爲它遍歷結果,但它不應該是一個問題,除非你想添加更多的結構給你查詢或檢索一些關聯的對象(這不應該是因爲你沒有加載關聯對象的ID)。

+0

所以在這種情況下'&:'just'將some_other_connection_id'轉換成一個bock,它只是每行上該屬性的訪問方法?我是新人,有時候還是很難理解那件事...... – ohhh

9

嘗試pluck方法

SomeModel.where(:some => condition).pluck("some_field") 

它就像

SomeModel.where(:some => condition).select("some_field").map(&:some_field)