2010-06-01 51 views
0

嗨我想問一下,如果不使用map,collect或each,它可能會從ActiveRecord查詢中清除數據。如何從Active Record查詢中清除數據而不使用地圖

names = User.find(:all, :select => "name") 
return names == [#<User name:"Peter">,#<User name:"Martin">] 

,我想的名字== [ 「彼得」, 「馬丁」]不使用地圖,收集或每個。感謝您的回答。

+0

只是好奇,爲什麼你需要它? – Salil 2010-06-01 14:42:29

+0

我只是想知道這樣的事情是否存在。另外,如果我有一個龐大的數據庫,我不知道如果使用地圖現在太慢了。 – Suborx 2010-06-01 15:00:07

+1

紅寶石速度很快,我不擔心循環大型數據集(除非你做了很多)。 – Samuel 2010-06-01 15:01:20

回答

1
User.connection.select_values("SELECT name FROM users") 
#=> ["francois"] 
+0

我認爲ActiveRecord沒有提供這樣的方法。但它確實如我所說的那樣在內部使用map。 – Samuel 2010-06-01 15:24:26

+0

哇... :)有趣的方法是從activerecord? – Suborx 2010-06-01 15:36:20

+0

是的,它在ActiveRecord中的rails 2. http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#M001421 – Samuel 2010-06-01 15:44:15

0

不,你不能做到這一點W/O使用的地圖,收集每個......等......

。換句話說,你不能讓導致這樣在單個查詢。

1

即使ActiveRecord提供了一種方法來做你想做的事(單列到數組的數組),它會在內部使用一個循環(每個或每個集合)來完成它。

我沒有看到在這種情況下使用循環有什麼問題,Ruby使它很容易做到。

users = User.find(:all, :select => "name").collect { |u| u.name } 
+0

我認爲問題明確提到「不使用地圖,收集或每個」 – Salil 2010-06-01 14:51:50

+0

是的,但不可能沒有循環做到這一點。所以我提供了最簡潔的解決方案。 – Samuel 2010-06-01 15:00:12

相關問題