2016-07-22 2 views
-1
User.find([1,2,3]) 

사용자 모델에서만 name을 얻고 싶습니다. 내가 시도 했으므로 객체를 반복하고 싶지 않습니다.선택한 객체를 선택하십시오

행운은 없습니다. pluck 동작을 사용하여 다음 시나리오를 수행하려면 어떻게해야합니까?

답변

2

Pluck은이 경우 작동하지 않습니다. 그래서 그 대신 pluck를 사용 :

User.find([1,2,3]).pluck(:name) 

map를 사용해보십시오 :

User.find([1,2,3]).map(&:name) 
2

rails 5에서는 잘 작동합니다. 그러나 이전 버전에서는 작동하지 않습니다. id: [1,2,3] 하나 개 이상의 레코드가 발견되지 않는 경우는

User.where(id: [1,2,3]).pluck(:name) 

오류 ActiveRecord::RecordNotFound 인상 find 때문에

하지만 where가 더 적합하여 생각합니다.

3

find 방법은 배열을 반환하고 pluck는 배열 방법이 아닙니다 : 그래서

2.1.1 :001 > User.find([1,2,3]).pluck(:name) 
    User Load (3.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IN (1, 2, 3) 
NoMethodError: undefined method `pluck' for #<Array:0x0000000f22ed90> 

당신은 당신이 이런 식으로 할 수 있습니다 find를 사용하여 수행하려는 경우 :

User.find([1,2,3]).collect(&:name) 

또는

다음과 같이 할 수 있습니다.

당신이 pluckcollect의 차이를해야 할 경우 63,210
User.where(id: [1,2,3]).pluck(:name) 

그리고 당신은이를 참조 할 수 있습니다 :

What is the difference between pluck and collect in Rails?

업데이트를 레일 5 5

이 작동합니다 레일 :

User.find([1,2,3]).pluck(:name) 

으로 Зелёный 남성 pluck 메서드가 Enumerable 개체에 추가되었습니다.

+0

에 호출 될 수 열거 된 방법 (https://github.com/rails/rails/pull/20350)이므로 배열 –

+0

감사합니다 @ Зелёный. 답변을 업데이트했습니다. – Deep

+0

대답을 받아 들여야합니다. –

4

pluckActiveRecord::Relation에서 작동합니다. find은 개체를 반환합니다.나는 가정

, 당신은 하나의 SQL 쿼리를 만들 것이라는 이유로 pluck을 사용하고 오히려 그들의 모든 레코드를 가져 와서 name

을 얻을 않습니다 map처럼 전체를 반복보다 name의 혼자 싶어 이 경우에는 사용하고자하는 것입니다 where

User.where(id: [1,2,3]).pluck(:name) 

where

같은 사용 사례를위한 최적의 방법이 될 것이다 pluck와 체인.

문서 : 5 'pluck` 그것은 find, where 및 레일 pluck

관련 문제