2017-11-30 1 views
0

상태을 기반으로 한 모델에 검색/필터 동작을 구현하려고합니다. status 열은 정수 유형입니다. 나중에 가독성을 위해 다음과 같이 status 열에 enum 데이터 유형을 사용했습니다.enum 상태를 기반으로 activerecord를 쿼리하는 방법은 무엇입니까?

class Production < ApplicationRecord  
    enum status:{ 
    Preproduction:1, 
    Postproduction: 2, 
    Completed:3 
    } 
end 

그런 다음 검색/필터 기능을 사용하여 사용자가 지정한 상태를 기반으로 레코드를 가져 오기 시작했습니다.

productions_controller

def filter 
    if params[:filter] 
     @productions = Production.where('productions.status like ?', "%#{params[:filter]}%") 
    else 
     @productions = Production.all 
    end 
    end 

보기

<%= form_tag [:filter, :productions], :method => 'get' do %> 
    <p> 
    <%= text_field_tag :filter, params[:filter] %> 
    <%= submit_tag "Filter", :status => nil %> 
    </p> 
<% end %> 

지금 내가 텍스트 필드에 12 또는 3 같은 정수 값을 입력하면 기록이 제대로 만 조회 할 수 있어요. 할당 된 것처럼 Preproduction과 같은 상태를 입력하면 결과가 표시되지 않습니다. 빈 페이지가 나타납니다. 이 문제를 어떻게 해결할 수 있습니까? 문자열과 쿼리를 받아들이도록하려면 어떻게해야합니까? 생산에 열거 status이 상태 해시처럼하지만 기호로 보이는 Production.statuses 문자열로 변경 해시를 가지고, 그래서 당신은이 작업을 수행 할 수

답변

1

...

@productions = Production.where('productions.status like ?', "%#{Production.statuses[params[:filter]]}%") 

열거 형은 복수로 클래스 메소드가 있습니다.

관련 문제