2016-07-22 20 views
0

説明がすでにこれに記載されているかどうかわからない、間違った質問をしているかもしれませんが、誰かがこの問題を助けてくれることを願っています。シリアル化されたモデル配列の値を見つける

私はモデル配列内の値を探しています。私はproduct_category 3または3および他のカテゴリの組み合わせに属しているすべての製品を見つける必要がある

#<Product:0x0055cd0c1382b8> { 
     :id => 42266, 
     :product_category => [ 
      [0] 8, [1] 3 
     ] 
} 

class Product < ActiveRecord::Base 
    # product_category :text 
    serialize :product_category, Array 
end 

エントリの例:私のモデルは、このようになります。

私は

ap Product.where(product_category: [8]) 

のようなものを試してみましたが、これは何も返さdoesntの。

この質問が既に尋ねられた場合は、私に正しい答えに転送してください。そうでない場合は、いつでも私を助けてくれると大変感謝しています。

実行:

  • のRails 4.2.4
  • ルビー2.3.1.p112
  • SQLite3の
+4

データベースを再構築し、製品カテゴリの列をシリアル化するのではなく、製品カテゴリとの間に 'has_and_belongs_to_many'または' has_many:through'を使用する必要があるようです。これで簡単に検索できるようになります –

+2

照合は不可能です。 @ j-dexxを提案してデータベースを再構築する必要があります。 – mudasobwa

+0

どのデータベースを使用していますか?どのタイプが列です。 PostgresでJSONスタイルの列を使用している場合、配列の内容を問い合わせることができます。 –

答えて

2

私はこれを行うにはお勧めしませんが、パッチワークのようになりますが

Product.all.select { |m| m.product_category.include? '3' } 

#serialiは使用しないでください。後であなたにこれを達成するために

+0

これはうまくいくようですが、あなたと他の人が示唆するように、代わりにデータベースを再構築します。ご回答有難うございます。 –

+0

多くの質問をしていなければ、それを再構成する必要はありません。 where節を使用すると、パフォーマンスの問題を克服することができます。 –

0

最良の方法は、句

Product.where("product_category = ?", [3].to_yaml) 

.to_yamlは、トリックを行いますどこ経由で照会する必要があるすべてのデータのためぜ。