는, 액티브 first
는 SQL을 생성합니다왜 레일은 ActiveRecord가 마지막으로 주문한 ID를 ID로 정렬합니까? <a href="http://guides.rubyonrails.org/active_record_querying.html" rel="nofollow">this</a>에 따르면
last
가 SQL을 생성하는 반면
SELECT * FROM clients LIMIT 1
:
SELECT * FROM clients ORDER BY clients.id DESC LIMIT 1
first
의 동작은, 내 의견에 따라, 정확하지 last
에 반면에 그 입니다. 순서 지정을 지정하지 않으면 단순 SELECT가 임의의 또는 예측할 수없는 순서로 리턴됩니다. 따라서 first
은 항상 동일한 레코드를 반환하도록 보장하지 않습니다 (최소 ID를 가진 레코드가 아닌 경우).
실마리가있는 사람이 있습니까? 왜 Rails ActiveRecord가 그런 식으로 작동합니까? 사전에
덕분에 Panayotis
미안 해요, 난 당신을하지 않았다. 나는'first'가 항상 최소한의 id를 가진 레코드를 반환한다고 믿습니다. 어느 시나리오에서 다르게 동작합니까? – Subodh
@sub_stantial'''SELECT * FROM clients LIMIT 1'''가 최소 ID를 가진 레코드를 반환한다는 것을 어떻게 알았습니까? 어딘가에 문서화되어 있습니까? [this] (http://www.ehow.com/how_2094997_sort-mysql-query-using-order.html)에 따르면 순서는 임의적이며 비 결정적입니다. 또한 [this] (http://dev.mysql.com/doc/refman/5.5/en/sorting-rows.html)에서 첫 번째 문구는 주문을하지 않는 한 결과가 특별한 순서없이 반환된다고 말합니다. 귀하의 성명을 증명할 수있는 참고 자료를 제공해주십시오. 동의하겠습니다. –
나는 단지'first'가 질의에 의해 반환 된 첫 번째 결과를 반환하기를 원했을뿐입니다 ('[0]'의 별칭이 될 것입니다). 대신에,'.select'를 사용하여 의도적으로 빠뜨린'id' 칼럼을 요구하기 위해'GROUP BY' 쿼리를 변경합니다 (ID가 유일하기 때문에 그룹핑이 없기 때문에!). 그래서'.first'는 이제 "올바르게"동작하지만 "올바른"동작은 실제로 매우 나쁜 행동입니다. –