1

'.find'를 어디에 사용하고 어디에 'where'를 사용해야하는지 혼란 스럽습니다. 쿼리 실행 중 성능 차이가 있습니까 ??.find 또는 활성 레코드 쿼리의 조건

예 : 아래 .find 사용하는 기존의 쿼리 변환 된 :

FileOrFolder.find_by_fullpath(completePath, :select=>"id")은 ->

FileOrFolder.where(fullpath: completePath).select(:id).first 

Component.find(:first, :conditions=>["cluster_id = ? AND name = ?", cluster_id, key]) ->

Component.where(cluster_id: cluster_id, name: key).first 
+0

성능의 차이를 볼 관계 (http://stackoverflow.com/questions/9574659/rails-where-vs-find) – MrYoshiji

+0

@MrYoshiji ... 나는이 게시물을 통해 갔다 .... 아니 어디 쿼리 성능 오른쪽에 대해 이야기 ... ..pls 내가 틀렸다면 나를 바로 잡는다. – Vinay

+0

당신은 콘솔'Component.where (id : 1) .first'와'Component.find (1)'에서 테스트함으로써 직접 할 수있다. 동일 검색어이기 때문에 똑같은 시간이 걸립니다. – MrYoshiji

답변

7

이들은 모두 동일합니다. 여기서 볼 수있는 것은 AREL이 통합되기 전의 ActiveRecord 쿼리 구문이 발전한 것입니다. 그래도 이전 스타일의 동적 찾기가 유효합니다.

이 구문은 ROR의 2.X에서이며, 이전 동적 측정기 사용 : 더 ROR 3.x의 스타일 이들 반면

FileOrFolder.find_by_fullpath(completePath, :select=>"id") 

을 :

FileOrFolder.where(fullpath: completePath).select(:id).first 
Component.where(cluster_id: cluster_id, name: key).first 

그리고 마지막 예를 find를 사용하여 두 문맥에서 유효합니다.

Component.find(:first, :conditions=>["cluster_id = ? AND name = ?", cluster_id, key]) 

의심스러운 경우 consult the ROR query guide.

저는 개인적으로 where 스타일이 여러 줄의 코드를 넘나들며 한 번에 쿼리를 작성할 때 매우 유용하다는 것을 알았습니다. 최신 시점까지 실행을 연기하기 때문에 단편적인 쿼리를 작성할 수 있습니다.

당신은 앞으로 where 스타일을 선호한다
1

그것은하지 않습니다 대개 동일한 SQL을 생성하기 때문에 상당한 성능 차이가 발생합니다 (예 :

).
Article.find_by_headline('foo') 
=> SELECT `articles`.* FROM `articles` WHERE `articles`.`headline` = 'foo' LIMIT 1 

Article.where(headline: 'foo').first 
=> SELECT `articles`.* FROM `articles` WHERE `articles`.`headline` = 'foo' LIMIT 1 
+0

그래서 말하려는 것입니다 ... 전반적인 구문 차이가 있습니다 ... 일부 find_by_headline 유형의 구문이 더 이상 사용되지 않으므로 우리는 어디에서 사용하려고합니까? – Vinay

+0

@Vinay, 'find_by'는 더 이상 사용되지 않으며 다른 유사 콘텐츠 만 사용됩니다. 필자의 선호는 현재 상황에 대해 더 명확하고 간결한 구문을 사용하는 것이다. 실제로 나는 둘 다 사용합니다. 나는 유니폼을 쓰는 것보다 더 개인적인 미학이라고 생각합니다. – Mori