2016-06-01 32 views
0

私はテーブルからハッシュ値でレコードを取得しようとしています。ここ は、レコードの例です:ハッシュ値でレコードを取得

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 
} 

私はparemetersステータス新しい(パラメータ[:ステータス] == '新')とのすべての活動を取得する必要があります。

このコードは機能しますが、配列ではなく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は、そのようなデータを格納し、すべてのYAMLノイズなしでクエリを実行できるJSONおよびhstoreカラムをサポートしています。 –

+0

ああ、私は前提を作るのが悪いです。しかし、モデル構造によれば、彼は 'parameters'に' text'カラムを持つgem呼び出しpublicアクティビティを使用していると確信しています。 – pyfl88

関連する問題