Rails 5 : ActiveRecord 또는 쿼리
Rails 5 ActiveRecord or
에서 쿼리를 어떻게 수행 합니까? 또한, 체인 수 와 액티브 쿼리에?or
where
체인에있는 기능 or
과 함께 절 where
에서 절 ActiveRecord
쿼리에서 사용할 수 레일 (5) . 관련 토론 및 pull 요청을 참조하십시오 .
따라서 Rails 5 에서 다음 작업을 수행 할 수 있습니다 .
를 얻으려면 post
함께 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)
Rails 5가이 OR
쿼리 를 사용할 때까지 기다릴 필요가 없습니다 . 우리는 rails 4.2.3
. 여기에 백 포트가 있습니다 .
gem where-or에 대해 Eric-Guo 에게 감사합니다 . 이제이 gem을 사용하여이 기능을 추가 할 수 있습니다 .OR
>= rails 4.2.3
(KM Rakibul Islam의 답변에 추가됩니다.)
범위를 사용하면 코드가 더 예뻐질 수 있습니다 (눈에 따라 달라짐).
scope a, -> { where(a) }
scope b, -> { where(b) }
scope a_or_b, -> { a.or(b) }
나는 할 필요가 있었다 (A && B) || (C && D) || (E && F)
그러나 Rails 5.1.4
의 현재 상태에서 이것은 Arel 또는 체인으로 달성하기에는 너무 복잡합니다. 하지만 여전히 Rails를 사용하여 가능한 한 많은 쿼리를 생성하고 싶었습니다.
그래서 나는 작은 해킹을 만들었습니다.
내 모델에서 다음과 같은 개인 메서드를 만들었습니다 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 '))
}
예상되는 쿼리 결과를 생성합니다 SELECT * FROM `models` WHERE ((A AND B) OR (C AND D) OR (E AND F))
..
이제 잘못된 OR없이 이것을 다른 범위 등과 쉽게 결합 할 수 있습니다.
: 아름다움은 내 sql_where 정상 절 인수를 소요되고 sql_where(name: 'John', role: 'admin')
생성합니다 (name = 'John' AND role = 'admin')
.
레일 5에 대한 능력이 or
와 절을 where
. 예를 들어.
User.where(name: "abc").or(User.where(name: "abcd"))
참고 URL : https://stackoverflow.com/questions/32753168/rails-5-activerecord-or-query
'Programing' 카테고리의 다른 글
iPhone / iOS JSON 구문 분석 자습서 (0) | 2020.08.14 |
---|---|
PL / pgSQL에서 사용하는 변수에 쿼리 결과 저장 (0) | 2020.08.14 |
Inno Setup for Windows 서비스? (0) | 2020.08.14 |
WebView 링크 클릭 기본 브라우저 열기 (0) | 2020.08.14 |
Python에서 두 날짜의 차이점 (0) | 2020.08.14 |