Program Club

Rails 4는 OR 쿼리를 지원합니까?

proclub 2020. 11. 26. 20:09
반응형

Rails 4는 OR 쿼리를 지원합니까?


따라서 Rails 4에는 오랫동안 원하는 not쿼리 사용 기능 이 추가되었습니다.

Article.where.not(title: 'Rails 3')

or쿼리 에 대한 유사한 지원이 추가 되었거나 만들 계획입니다. 릴리스 정보를 검색해도 아무것도 찾을 수 없습니다.

분명히 나는 ​​시도했다

Article.where(title: 'Rails 3').or(title: 'Rails 4')

그러나 그것은 작동하지 않습니다.


Article.where(title: ['Rails 3', 'Rails 4']) Active Record에서하는 방법입니다.

"Rails-y"구문을 사용하여 임의의 SQL 쿼리를 복제 할 수 없습니다. 그러나 항상 리터럴 SQL로 전달할 수 있습니다.

따라서 다음을 수행 할 수도 있습니다.

Article.where("articles.title = 'Rails 3' OR articles.title = 'Rails 4'")

이제 Rails 5에서 작동합니다.

Article.where(title: 'Rails 3').or(Article.where(title: 'Rails 4'))

Rails의 소스 코드 예제 .


가장 일반적인 대안은 이미 @gregates의 답변입니다.

최근에 레일 소스에서 풀 리퀘스트가있었습니다.

#any_ofactiverecord에 추가하거나 기능을 수행하는 쿼리 메소드를 active_record에 추가하십시오.

기여자가 승인되지 않은 경우를 대비하여 이미 gem을 생성했습니다.

레일 3.2 및 4 호환

https://github.com/oelmekki/activerecord_any_of

나는 아직 그것을 시도하지 않았지만 곧 사용하고 싶습니다.


이것이 오래된 스레드라는 것을 알고 있지만이 문제에 대한 해결책을 찾는 다른 사람은이 코드가 도움이 될 수 있습니다.

Article.where(title: ["Rails 3", "Rails 4"])

SQL 주입 위험없이 누군가가 올바른 방향으로 나아가는 데 도움이 될 수 있습니다.


레일스 마스터 브랜치가 이제 OR 쿼리를 지원하는 것 같습니다. https://github.com/rails/rails/pull/16052

나는 그것이 다음 주요 릴리스의 프레임 워크에있을 것이라고 가정합니다.


Rails 5는이를 지원하지만 Rails 4.2에이 백 포트를 사용할 수 있습니다 : https://github.com/Eric-Guo/where-or


더 복잡한 쿼리에 Squeel사용할 수 있습니다 .

Article.where{(title == 'Rails 3') | (title == 'Rails 4')}

그 결과 다음 SQL 쿼리가 생성됩니다.

SELECT `articles`.* FROM `articles` WHERE ((`articles`.`title` = 'Rails 3' OR `articles`.`title` = 'Rails 4'))

참고 URL : https://stackoverflow.com/questions/17192829/does-rails-4-have-support-for-or-queries

반응형