2017-01-03 2 views
0

많은 위치를 가진 사용자와 일치하는 연관된 객체 만 반환하는 사용자를 쿼리하려면 pg_search를 사용할 수 있습니까? 따라서 사용자가 NY로부터 2 개의 위치를 ​​갖고 다른 사용자가 NY 및 FL에서 위치를 갖는 경우. 우리는 User.search_name_and_location('F NY')을하고 NY와 일치하는 관련 객체와 함께 그들의 이름으로 F를 가진 모든 사람들을 되 찾을 수 있습니까?사용자를 이름 및 관련 위치로 쿼리하지만 모든 위치가 아닌 일치하는 위치 만 가진 사용자를 반환하십시오.

답변

1

필요한 일치 패턴을 가진 사용자의 첫 번째 쿼리. 별도의 모델

user_pattern = "N" 
users = User.where("name like ?", "%#{user_pattern}%") 

다음 두 때문에 필요한 패턴

location_pattern = "NY" 
locaations_array = users.includes(:locations).collect(&:locations).flatten // eager loading locations and converting them to 1D array. 
locations = locations_array.select{ |location| location.name.casecmp("#{location_pattern}") == 0 } // this does a case ignore comparison 

과 위치를 얻기를 위해 비슷한 쿼리를 사용하고, 그것은 모두 하나의 쿼리를 사용하여 얻을 어렵습니다. 그래서, 난 당신의 코드 중 일부가 작동하지 않습니다 위의

def users_with_locations(user_pattern, location_pattern) 
    result = Hash.new 
    users = User.where("name like ?", "%#{user_pattern}%") 

    locations_array = users.includes(:locations).collect(&:locations).flatten // I'm eager loading all the locations and converting them to a 1D array 
    locations = locations_array.select{ |location| location.name.casecmp(location_pattern) == 0 } // this does a case ignore comparison 

    result[:users] = users 
    result[:locations] = locations 
    result 
end 
+0

의 모든 작업을 수행 할 결과

result = Hash.new(users: users, locations: locations) result[:users] = users result[:locations] = locations 

또는 간단한 방법을 프레임에 해시를 사용하고 있습니다. 'users.locations'에 대해'정의되지 않은 메소드 위치 '를 얻습니다. – Yonk

+0

죄송합니다. 업데이트 된 코드로 테스트하고 확인해 주시겠습니까? –

관련 문제