2010-06-01 4 views
0

안녕하세요,지도를 사용하지 않고 ActiveRecord 쿼리의 데이터를 지우는 것이 가능한지 물어보고 싶습니다.맵을 사용하지 않고 액티브 레코드 쿼리에서 데이터를 지우는 방법

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

지도와지도를 사용하지 않고 이름 == [ "Peter", "Martin"]을 원합니다. 귀하의 답변에 감사드립니다.

+0

그냥 궁금해서 당신이 그것을 필요로하는 이유? – Salil

+0

그와 같은 것이 있는지 궁금합니다. 또한 나는 거대한 데이터베이스를 가지고 있다면지도를 사용하는 것이 너무 느리다는 것을 모른다. – Suborx

+1

루비가 빠르다. 큰 데이터 세트를 루핑하는 것에 대해서는 걱정할 필요가 없다. – Samuel

답변

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

ActiveRecord가 그런 방법을 제공하지 않는다는 점을 고발합니다. 그러나 내가 말했듯이 그것은 내부적으로지도를 사용합니다. – Samuel

+0

와우 ... :) 재미있는 방법은 activerecord에서 무엇입니까? – Suborx

+0

예. 레일 2의 ActiveRecord에 있습니다. http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#M001421 – Samuel

0

당신은/w 등 ... 각 수집,지도를 사용하여 O를 ...... otherwords에서

는 단일 쿼리에서 다음과 같은 결과를 얻을 수 없다고 할 수 없다 아니오. 없습니다

1

ActiveRecord가 원하는대로 (단일 열에서 값 배열로) 수행 할 수있는 방법을 제공하더라도 내부적으로 루프를 사용하여 각 루프를 수집합니다.

이 경우 루프를 사용할 때 잘못된 점을 알지 못합니다. 루비를 사용하면 매우 쉽게 처리 할 수 ​​있습니다.

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

지도를 사용하지 않고 명확하게 언급 한 질문이 있다고 생각하십니까? – Salil

+0

네, 루핑하지 않고서는 불가능합니다. 그래서 나는 가능한 가장 간결한 해결책을 제시했다. – Samuel

관련 문제