복붙노트

[RUBY-ON-RAILS] 어떻게 Arel와 레일에서 LIKE 쿼리를 할까?

RUBY-ON-RAILS

어떻게 Arel와 레일에서 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 올바르게 쿼리 문자열 '스미스'래핑하지만, 이것은 LIKE 문이기 때문에 작업을 나던.

한 사람이 어떻게 Arel에서 LIKE 쿼리를합니까?

추신 보너스 - 나는 실제로 쿼리에 대한 일치가 있는지 확인하기 위해 테이블에 두 필드 모두 이름과 설명을 스캔하는 것을 시도하고있다. 어떻게 그 일이 것?

해결법

  1. ==============================

    1.이것은 당신이 arel 쿼리와 같은을 수행하는 방법이다 :

    이것은 당신이 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)))
    
  2. ==============================

    2.시험

    시험

    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
    
  3. ==============================

    3.르우벤 Mallaby의 대답은 사용 매개 변수 바인딩에 더 단축 할 수있다 :

    르우벤 Mallaby의 대답은 사용 매개 변수 바인딩에 더 단축 할 수있다 :

    User.where("name like :kw or description like :kw", :kw=>"%#{params[:query]}%").to_sql
    
  4. from https://stackoverflow.com/questions/4430578/how-to-do-a-like-query-in-arel-and-rails by cc-by-sa and MIT license