반응형
Arel and Rails에서 LIKE 쿼리를 수행하는 방법은 무엇입니까?
나는 다음과 같은 것을하고 싶다 :
SELECT * FROM USER WHERE NAME LIKE '%Smith%';
Arel에서의 나의 시도 :
# params[:query] = 'Smith'
User.where("name like '%?%'", params[:query]).to_sql
그러나 이것은 다음과 같습니다.
SELECT * FROM USER WHERE NAME LIKE '%'Smith'%';
Arel은 쿼리 문자열 'Smith'를 올바르게 랩핑하지만 이것이 LIKE 문이므로 작동하지 않습니다.
Arel에서 LIKE 쿼리는 어떻게 수행합니까?
PS 보너스-실제로 테이블에서 이름과 설명의 두 필드를 스캔하여 쿼리와 일치하는 항목이 있는지 확인하려고합니다. 어떻게 작동할까요?
이것은 arel에서 비슷한 쿼리를 수행하는 방법입니다.
users = User.arel_table
User.where(users[:name].matches("%#{user_name}%"))
추신:
users = User.arel_table
query_string = "%#{params[query]}%"
param_matches_string = ->(param){
users[param].matches(query_string)
}
User.where(param_matches_string.(:name)\
.or(param_matches_string.(:description)))
시험
User.where("name like ?", "%#{params[:query]}%").to_sql
추신.
q = "%#{params[:query]}%"
User.where("name like ? or description like ?", q, q).to_sql
Aaand 오랜 시간이지만 @ cgg5207은 수정 사항을 추가했습니다 (길이가 길거나 여러 개의 긴 이름을 가진 매개 변수를 검색하거나 입력하기에 너무 게으른 경우 가장 유용합니다)
q = "%#{params[:query]}%"
User.where("name like :q or description like :q", :q => q).to_sql
또는
User.where("name like :q or description like :q", :q => "%#{params[:query]}%").to_sql
매개 변수 바인딩을 사용하기 위해 Reuben Mallaby의 답변을 더 단축 할 수 있습니다.
User.where("name like :kw or description like :kw", :kw=>"%#{params[:query]}%").to_sql
참고 URL : https://stackoverflow.com/questions/4430578/how-to-do-a-like-query-in-arel-and-rails
반응형
'Programming' 카테고리의 다른 글
CSS에서 확인란의 테두리 스타일을 변경하는 방법은 무엇입니까? (0) | 2020.07.29 |
---|---|
PHP에서 루프를 '종료'할 수 있습니까? (0) | 2020.07.29 |
GUID가 항상 고유하다고 가정해도 안전합니까? (0) | 2020.07.29 |
이미 사용중인 주소-bind (2) (Errno :: EADDRINUSE) (0) | 2020.07.29 |
PHP "if"문에 HTML을 포함시킬 수 있습니까? (0) | 2020.07.29 |