[RUBY-ON-RAILS] 5 레일 : 액티브 OR 쿼리
RUBY-ON-RAILS5 레일 : 액티브 OR 쿼리
어떻게 5 액티브 레일에서 또는 쿼리를해야합니까? 또한, 체인 또는 여기서 액티브 쿼리에 함께 가능한가?
해결법
-
==============================
1.액티브 쿼리 절은 관련 토론과 풀 요청을 참조하십시오 5. 레일에서 사용할 수 곳과 함께 체인 또는 절 할 수있는 능력.
액티브 쿼리 절은 관련 토론과 풀 요청을 참조하십시오 5. 레일에서 사용할 수 곳과 함께 체인 또는 절 할 수있는 능력.
그래서, 당신은 레일 (5)에 다음의 일을 할 수있을 것입니다 :
ID 1 또는 2로 게시물을 얻으려면 :
Post.where('id = 1').or(Post.where('id = 2'))
몇 가지 다른 예 :
(A && B) || 씨:
Post.where(a).where(b).or(Post.where(c))
(A || B) && C :
Post.where(a).or(Post.where(b)).where(c)
-
==============================
2.우리는이 OR 쿼리를 사용하는 레일 5 기다릴 필요가 없습니다. 우리는 또한 레일 4.2.3와 함께 사용 할 수 있습니다. 여기에 백 포트가있다.
우리는이 OR 쿼리를 사용하는 레일 5 기다릴 필요가 없습니다. 우리는 또한 레일 4.2.3와 함께 사용 할 수 있습니다. 여기에 백 포트가있다.
보석 경우 또는, 이제 우리는> = 4.2.3은이 보석을 사용하여 레일이 OR 기능을 추가 할 수 있습니다 에릭 - 구오에 감사드립니다.
-
==============================
3.(K M Rakibul 이슬람에 의해 대답에 그냥 추가.)
(K M Rakibul 이슬람에 의해 대답에 그냥 추가.)
범위를 사용하여 코드 (보는 눈)에 따라 더 예뻐 될 수 있습니다 :
scope a, -> { where(a) } scope b, -> { where(b) } scope a_or_b, -> { a.or(b) }
-
==============================
4.나는 (A && B)를 할 필요가 || (C && D) || (E && F)
나는 (A && B)를 할 필요가 || (C && D) || (E && F)
그러나 레일 5.1.4의 현재 상태에서이 GET 너무 Arel 또는 체인으로 달성하기 위해 복잡. 하지만 난 여전히 가능한 쿼리 많이 생성 레일을 사용하고 싶었다.
그래서 나는 작은 해킹을했다 :
내 모델에서 나는 개인 방법이라고 sql_where을 만들어 :
private def self.sql_where(*args) sql = self.unscoped.where(*args).to_sql match = sql.match(/WHERE\s(.*)$/) "(#{match[1]})" end
다음 내 범위에서 나는 OR의를 개최 배열을 생성
scope :whatever, -> { ors = [] ors << sql_where(A, B) ors << sql_where(C, D) ors << sql_where(E, F) # Now just combine the stumps: where(ors.join(' OR ')) }
어떤 예상 쿼리 결과를 생성합니다 : `models` WHERE ((A 및 B) 또는 (C AND D) 또는 (E 및 F)) FROM SELECT *.
그리고 지금은 쉽게 불법 OR의없이 등 범위간에이 결합 할 수 있습니다.
아름다움은 내 sql_where 정상 절 인수를 소요되는 : sql_where (이름 : '존'역할 '관리자')은 (이름 = '존'과 역할 = '관리자')를 생성합니다.
-
==============================
5.레일 5에 대한 능력이나 절을 가지고있다. 예를 들어.
레일 5에 대한 능력이나 절을 가지고있다. 예를 들어.
User.where(name: "abc").or(User.where(name: "abcd"))
from https://stackoverflow.com/questions/32753168/rails-5-activerecord-or-query by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 5 레일 : 터보 링크 .ready $ (문서) ()를 사용하는 방법 (0) | 2020.02.07 |
---|---|
[RUBY-ON-RAILS] 결과에 순서 has_many 협회 카운트 레일 (0) | 2020.02.07 |
[RUBY-ON-RAILS] '필요'등의 파일을로드 할 수 없습니다 - '노코 기리 \ 노코 기리'(LoadError)을 실행할 때`server` 레일 (0) | 2020.02.07 |
[RUBY-ON-RAILS] 루비 온 레일즈에서 코드를 넣어해야 String 클래스를 확장하는? (0) | 2020.02.07 |
[RUBY-ON-RAILS] 테스트 문자열은 루비 온 레일즈의 숫자 인 경우 (0) | 2020.02.07 |