0

해시 값으로 테이블에서 레코드를 가져 오려고합니다. 다음은 기록 예입니다해시 값으로 레코드 가져 오기

내가 paremeters 상태 새로운 모든 활동 얻을 필요가
Activity:0x0000000709be18> { 
       :id => 1, 
     :trackable_id => 3, 
    :trackable_type => "User", 
      :owner_id => 1, 
     :owner_type => "User", 
       :key => "user.ban", 
     :parameters => { 
     :status => "new" 
    }, 
     :recipient_id => nil, 
    :recipient_type => nil, 
     :created_at => Wed, 01 Jun 2016 22:19:39 UTC +00:00, 
     :updated_at => Wed, 01 Jun 2016 22:19:39 UTC +00:00 
} 

(매개 변수 [: 상태] == '새').

이 코드는 작동하지만 배열이 아닌 activerecord 관계를 반환해야합니다.

Activity.select{|act| act.parameters == { status: 'new'}} 
+0

'Activity.where ('상태 =?', '새') ' –

+0

매개 변수 해시이며, 상태가 사용중인 PostgreSQL을 어떤 버전이 해시 –

+1

의 열쇠? 'parameters' 컬럼의 타입은 무엇입니까? – Raffael

답변

0

직렬화 된 필드 내에서 검색하는 것은 쉽지 않다,하지만 당신은 몇 가지 제한 사항 LIKE를 사용할 수 있습니다.

Activity.where('parameters LIKE ?', '%status: new%')

작동하지만, 난 그냥 공개 활동 보석 소유자가 언급 한 것을 같이, 사용자 정의 필드를 추가 되죠 :

"모든 활동은, 당신이 할 수있는 몇 가지 분야 이외에 또한 사용자 지정 필드를 설정하십시오.이 매개 변수는 데이터베이스에서 쉽게 쿼리 할 수없는 직렬화 된 해시이므로 매우 유용 할 수 있습니다. "

+0

그러나 모델에서'serialize'를 사용하여 일부 YAML을'text' 열에 채우고 있다고 가정하고 있습니다. PostgreSQL은 데이터를 저장할 수있는 JSON 및 hstore 열을 지원하며 모든 YAML 노이즈없이 쿼리합니다. –

+0

오, 내 가정을 만들기에 나쁘다. 그러나 모델 구조에 따르면 나는 보석 호출 public activity를 사용하고 있다고 확신한다.'parameters'는'text' 컬럼을 가지고있다. – pyfl88