반응형
ActiveRecord는 쿼리 끝에 'AND(1=0)'를 추가합니다.
저는 일을 해결하려고 레일 콘솔에서 장난을 쳤는데, 제 쿼리 중 하나가 실행되지 않을 때 계속 0이 되는 것을 알게 되었습니다.생성된 SQL 쿼리를 보면 다음과 같은 정보가 있음을 알 수 있습니다.AND (1=0)
그것에 매번 첨부됩니다.이건 좀 귀찮고, 왜 이러는지 모르겠어요.
참고: 작동 가능한 보석을 사용합니다.
재생하는 단계:
(레일 콘솔의 테이블에 연결 후)
2.1.2 :xxxx > @parent = Parent.take
Parent Load (38.1ms) SELECT `parents`.* FROM `parents` LIMIT 1
=> #<Parent id: 37, ...>
2.1.2 :xxxx > @child = Child.where(id: @parent.actable_id)
SQL (0.7ms) SELECT `childs`.`id` AS t0_r0, `childs`.`attribute` AS t0_r1, FROM `childs`
...
LEFT OUTER JOIN `parents` ON `parents`.`actable_id` = `childs`.`id` AND `parents`.`actable_type` = 'child type' WHERE `childs`.`id` = 20 AND (1=0)
=> #<ActiveRecord::Relation []>
왜 이런 일이 생기는 건가요?어떻게 하면 멈출 수 있을까요?
레일은 SQL 다음과 같이 생성합니다.AND (1=0)
값이 빈 배열에 있는 열을 쿼리할 때:
Child.where(id: [])
직관적으로, 다음과 같은 SQL을 생성할 것으로 예상할 수 있습니다.SELECT * FROM children WHERE id IN ()
,그렇지만()
실제로 유효한 SQL이 아닙니다.그러나 해당 쿼리와 일치하는 행이 없으므로 Rails는 이 문제를 해결하기 위해 동일한 쿼리를 생성하고 행을 반환하지 않습니다.
SELECT * FROM children WHERE 1=0;
언급URL : https://stackoverflow.com/questions/25816792/activerecord-appends-and-1-0-to-end-of-queries
반응형
'programing' 카테고리의 다른 글
fetch를 사용하여 멀티파트 폼 데이터를 게시하려면 어떻게 해야 합니까? (0) | 2023.10.02 |
---|---|
"$(.ready(handler)"가 권장되지 않는 이유는 무엇입니까? (0) | 2023.10.02 |
서명되지 않은 int에 음수 값을 할당하면 어떻게 됩니까? (0) | 2023.09.27 |
새 Spring 세션을 추가할 때 cookie-value 오류 발생 (0) | 2023.09.27 |
XML에서 Elements(요소) 또는 Attribute를 사용해야 합니까? (0) | 2023.09.27 |