2016-10-31 7 views
1

집 모델과 business_model [] 열이 있습니다. 이 열은 라디오 버튼, 모든 문자열을 사용하여 "깨어있게", "잠자기"또는 "깨우기, 잠자기"로 설정할 수 있습니다. 나는 모든 집들에 business_model을 "깨어있는"것으로 포함시키고 싶습니다.Rails LIKE - 쿼리가 제대로 작동하지 않습니다.

@house = (House.all).uniq.where("business_model like ?", "sleep") 

나는이 코드를 사용해 봤다. 열이 "절전"인 경우에만 작동합니다. 그것이 "깨어있을 때, 잠"때 그것은 nil을 반환합니다.

왜 그럴까요?

+0

메모는 배열 결과 집합에서 코드가'where'를 호출하는 것입니다. ActiveRecord 인터페이스를 닦을 수도 있습니다. 'House.where ('business_model LIKE?', '% sleep %') '와 같은 것이 당신이 쫓고있는 것입니다. – coreyward

+1

@ henners66 아니오, [w3fools] (http://w3fools.com)을 참조하지 말고 [PostgreSQL 문서] (https://www.postgresql.org/docs/current/static/functions-matching.html)을 참조하십시오.) PostgreSQL을 사용할 때. –

답변

6

와일드 카드를 던져야합니다. where("business_model like ?", "%sleep%")을 시도해보십시오. 또한 sleepingasleep과 같은 항목을 잡습니다.

쿼리에 대해 더 많은 제어 권한을 제공하는 JSON 데이터베이스 열을 사용하는 것이 좋습니다.

+0

JSON 열을 사용하려는 이유는 무엇입니까? – coreyward

+0

쉼표로 구분 된 문자열이 너무 많을 수 있습니다. 데이터베이스 열이 "A, B"가되지만 쿼리가 "B, A"로 표시되면 (언젠가는 여러 쿼리를 원할 것입니다) 어떻게 될까요? 대부분의 경우 데이터베이스가 특정 데이터를 저장하는 데 도움이되므로 왜 DIY를 시도해보십시오. –

+0

https://www.postgresql.org/docs/9.4/static/textsearch.html – coreyward

3

모두 엉망입니다. House.all은 이 ActiveRecord::Relation의 인스턴스에서 호출하지 않기 때문에 오류가 발생한다는 의미의 Array를 반환합니다. 원한다면 :

House.where("business_model LIKE ?", "sleep").uniq 

그리고 네, 거기에 와일드 카드가 있어야 행복합니다. 속성의 값에서 "sleep"을 찾을 필요가 없다면 LIKE를 사용할 필요가 없습니다.

House.where("business_model LIKE ?", "sleep%").uniq 

.uniq도 나에게 조금씩 뛰어납니다. House 테이블에 중복 된 항목이 있습니까? 그렇다면 아마도 필요하지 않을 것입니다.

관련 문제