2017-11-23 3 views
-1

몇 시간 동안 파고 들었습니다. 그러나 MySQL을 사용하는 레일스 활성 레코드에이 쿼리를 작성하는 가장 좋은 방법은 무엇입니까?Ruby Rails 필드가 여러 개이고 일반 조건이

select * from users where (username like '%leonardo%' or email like 
'%leonardo%' or name like '%leonardo%') and department = 'X' 

모든 것은 좋아하는 것이 큰 paranthesis 안에 있어야하며 'X'부서 여야합니다. 고마워.

답변

0

당신은 사용자 모델의 각 속성을 요청할 수 있습니다 : 경우

User.where('users.username LIKE "%leonardo%" OR users.email LIKE "%leonardo%" OR users.name LIKE "%leonardo%" AND users.department_id = 1') 

당신이 하나 개의 값을 전달하고

하는 것은 사용자 이름, 이메일 주소와 이름을 비교 :

User.where(
     'users.username LIKE :q OR 
     users.email LIKE :q OR 
     users.name LIKE :q AND 
     users.department_id = :dept', 
     q: '%leonardo%', dept: 1 
    ) 

그렇지 않으면 바인딩 할 수 있습니다 그들을 하나씩 지나쳐서.

+0

감사합니다. 나는 노력했고 효과가 있었다. 이 방법이 SQL 주입의 관점에서 안전한지 확인하기 만하면됩니다. 여기 레일에 초보자를 도와 줘서 고마워. – Kruze

+0

첫 번째는 당신이 일하는 방식을 복제하기 위해 만들어졌고, 마지막 하나는 선호되는 방식이었습니다. 항상 사용할 매개 변수를 바인딩 할 위치를 사용할 때. 또한 [여기] (https://rails-sqli.org/)를 볼 수도 있습니다. –