2012-08-15 3 views
0

내 데이터베이스에 해시 형태로 데이터를 저장하는 '변경 사항'이라는 필드가 포함 된 '감사'테이블이 있습니다.찾기 : 해시에 대한 모든 조건

나는 다음과 같은 조건을 모두 감사를 검색하고 싶습니다 : 리턴 아무것도 위

- auditable_type = 'Expression' 
- action = 'destroy' 
- changes = :EXP_SUBMISSION_FK =>'9999992642' #note that this field stores hash values 

@expression_history_deleted = Audit.find(:all, :conditions => ["auditable_type =? AND action = ? AND changes = ?",'Expression', 'destroy' , { :EXP_SUBMISSION_FK =>'9999992642'} ]) 

코드입니다.

다음과 같이 내가 항목 목록을 가져올 수는 읽는 그래서이 상태에서 '변화'를 제거하는 경우 :

@expression_history_deleted = Audit.find(:all, :conditions => ["auditable_type =? AND action = ?",'Expression', 'destroy']) 



    <% @expression_history_deleted.each do |test| %> 
    <%= test.changes['EXP_SUBMISSION_FK'] %> ---displays the value 
    <% end %> 

내 질문에 내가 해시에 대한 조건을 검색을 수행하고 설정하는 방법입니다 값.

**** 

내가 'acts_as_audited'는 '감사'테이블에 해시 형식의 모든 변경 사항을 저장하는 사용하고 있습니다.

**** 

답변

1

ActiveRecord에서 serialize 함수를 사용한다고 가정합니다.

불행히도 SQL 수준에서 쉽게 검색 할 수 있다고 생각하지 않습니다. 분명히 모든 레코드를 꺼내어 Ruby에서 검색을 처리 할 수는 있지만 이상적이지 않습니다.

직렬화 된 열에서 검색 할 필요가있는 항목을 모두 자체 항목으로 이동하는 것이 좋습니다.

+0

감사합니다. 'acts_as_audited'를 사용하여 '감사'테이블의 모든 변경 사항을 해시 형식으로 저장합니다. – Kim

+0

그럴 경우, 레코드를 검색하고 루비를 사용하여 검색을 수행해야한다고 생각합니다. – Kim

+0

가장 간단한 해결책 인 것 같습니다. 다른 방법은 블라드 슨이 제안한 것처럼하고 복잡한 전체 텍스트 검색을 시도하는 것입니다.하지만 텍스트가 아닌 실제 데이터를 다루기 때문에 편집증이 날 것입니다. – jbarket

1

ActiveRecord 직렬화 매크로를 사용하는 경우 열 changes 및 "audible_type : Expression"과 같은 개별 구성을 덤프 할 수 있습니다. 해당 열에 대한 전체 텍스트 검색을 수행하면 작업이 완료됩니다. 하지만 더 좋은 방법은 해당 데이터를 실제 데이터베이스 수준 열로 추출하는 것입니다.

관련 문제