[RUBY-ON-RAILS] 4 LIKE 쿼리를 레일 - 액티브 따옴표를 추가
RUBY-ON-RAILS4 LIKE 쿼리를 레일 - 액티브 따옴표를 추가
그래서 같은 쿼리 같은 작업을 수행하려고
def self.search(search, page = 1 )
paginate :per_page => 5, :page => page,
:conditions => ["name LIKE '%?%' OR postal_code like '%?%'", search, search], order => 'name'
end
그러나이 실행되는 무언가가과 같이 나올하기 위해 SQL 문을 발생 따옴표를 추가
SELECT COUNT(*)
FROM "schools"
WHERE (name LIKE '%'havard'%' OR postal_code like '%'havard'%')):
그래서 당신은 내 문제를 볼 수 있습니다. 나는 레일 4와 그와 액티브 일 또는 가능성이 포스트 그레스 일이 있다면 그렇게하지 않도록 사용한 적이 둘 다 포스트 그레스 (9)를 사용하고 있습니다.
내가 최종 쿼리에서 '% my_search %'처럼 그래서 어떻게이 설정할 수 있습니다?
해결법
-
==============================
1.당신의 자리 문자열로 대체 당신은 제대로 처리하지 있습니다.
당신의 자리 문자열로 대체 당신은 제대로 처리하지 있습니다.
바꾸다
"name LIKE '%?%' OR postal_code LIKE '%?%'", search, search
와
"name LIKE ? OR postal_code LIKE ?", "%#{search}%", "%#{search}%"
-
==============================
2.대신, 레일 (2)로부터 조건 구문을 사용하는 사용하는 방법 대신 4 개 곳의 레일 :
대신, 레일 (2)로부터 조건 구문을 사용하는 사용하는 방법 대신 4 개 곳의 레일 :
def self.search(search, page = 1 ) wildcard_search = "%#{search}%" where("name ILIKE :search OR postal_code LIKE :search", search: wildcard_search) .page(page) .per_page(5) end
참고 : 대신에 위의 용도 매개 변수 구문? 자리 표시 자 :이 모두 동일한 SQL을 생성한다.
def self.search(search, page = 1 ) wildcard_search = "%#{search}%" where("name ILIKE ? OR postal_code LIKE ?", wildcard_search, wildcard_search) .page(page) .per_page(5) end
참고 : 이름 ILIKE를 사용하여 - 포스트 그레스 경우 LIKE의 영향을받지 버전
-
==============================
3.문자열 보간이 작동하지만 귀하의 질문에 지정하는 4 레일로, 당신은 이것에 대한 Arel을 사용하고 앱 데이터베이스 불가지론 유지 될 수 있습니다.
문자열 보간이 작동하지만 귀하의 질문에 지정하는 4 레일로, 당신은 이것에 대한 Arel을 사용하고 앱 데이터베이스 불가지론 유지 될 수 있습니다.
def self.search(query, page=1) query = "%#{query}%" name_match = arel_table[:name].matches(query) postal_match = arel_table[:postal_code].matches(query) where(name_match.or(postal_match)).page(page).per_page(5) end
-
==============================
4.액티브는 매개 변수에 의해 참조 것을 알고 영리 충분하다? 문자열이고, 그래서 단일 따옴표로 둘러싸. 하나의 게시물 패드에 필요한 %의 기호 문자열을 사용 루비 문자열 보간을 제시과 같이 할 수있다. 그러나, 이것은 (나쁜되는) SQL 인젝션에 노출 될 수 있습니다. 난 당신과 같이 문자열을 준비하기 위해 SQL CONCAT () 함수를 사용하는 것이 좋습니다 것입니다 :
액티브는 매개 변수에 의해 참조 것을 알고 영리 충분하다? 문자열이고, 그래서 단일 따옴표로 둘러싸. 하나의 게시물 패드에 필요한 %의 기호 문자열을 사용 루비 문자열 보간을 제시과 같이 할 수있다. 그러나, 이것은 (나쁜되는) SQL 인젝션에 노출 될 수 있습니다. 난 당신과 같이 문자열을 준비하기 위해 SQL CONCAT () 함수를 사용하는 것이 좋습니다 것입니다 :
"이름 LIKE CONCAT ( '%',?, '%') 또는 우편 _ 번호 LIKE CONCAT ( '%',?, '%')", 검색, 검색)
-
==============================
5.시험
시험
def self.search(search, page = 1 ) paginate :per_page => 5, :page => page, :conditions => ["name LIKE ? OR postal_code like ?", "%#{search}%","%#{search}%"], order => 'name' end
추가 정보를 원하시면 AREL 조건에 문서를 참조하십시오.
-
==============================
6.
.find(:all, where: "value LIKE product_%", params: { limit: 20, page: 1 })
from https://stackoverflow.com/questions/19105706/rails-4-like-query-activerecord-adds-quotes by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 레일 3 시간대 (0) | 2020.02.29 |
---|---|
[RUBY-ON-RAILS] 3.1 자산 레일 - 이상한은 개발에서 봉사 (0) | 2020.02.29 |
[RUBY-ON-RAILS] 유증에 모두 계정 및 사용자 테이블을 사용하여 (0) | 2020.02.29 |
[RUBY-ON-RAILS] 레일의 동적 오류 페이지 3 (0) | 2020.02.29 |
[RUBY-ON-RAILS] 레일 4.0에서 고안에 새로운 필드를 추가 허가되지 않은 매개 변수 (0) | 2020.02.29 |