2015-10-12 3 views
-1

В моем db У меня есть столбец, который принимает хэш значений. Как использовать, где можно получить значения?Как вы используете 'where' для параметра, имеющего хэш значений?

Так что, если у меня есть эта

<PublicActivity::Activity id: 87, trackable_id: 1, trackable_type: "User", owner_id: 1, owner_type: "User", key: "shout.like", parameters: {:id=>"1187467057945665_1220996764592694", :provider=>"github"}, recipient_id: 1, recipient_type: "User", created_at: "2015-10-12 19:07:16", updated_at: "2015-10-12 19:07:16"> 

Как найти все записи с провайдером: «GitHub»? Я не могу найти обозначения о том, как это делается.

Я попытался это, но я получаю пустой массив

PublicActivity::Activity.where(parameters: 'github') 
+3

Какой тип базы данных вы используете и какой тип столбца является «параметрами»? –

+0

... потому что в зависимости от этого ответ будет «использовать операции с конкретными базами данных» или «вы не можете, по крайней мере, не надежно». –

+0

Использование ActiveRecord и параметров - это «текст». Кроме того, использование sqlite в разработке и mysql в производстве – teddybear

ответ

0

при использовании PostgreSQL используется следующий синтаксис для поиска Hash Сериализированная:

PublicActivity::Activity.where("parameters -> 'provider' = 'github'") 

ИЛИ:

PublicActivity::Activity.where("parameters @> 'provider=>github'") 

, чтобы получить все записи, в которых параметры содержат ключ поставщика:

PublicActivity::Activity.where("parameters ? 'provider'") 
+0

Хорошо. Как вы это делаете для mysql или sqlite? – teddybear

+0

Я думаю, что он будет работать в sqlite, mysql, я не знаю. – matanco

+0

Вместо того, чтобы входить в ответ с использованием конкретного DBM, было бы более целесообразно спросить, какой DBM используется (поскольку OP не говорил до тех пор, пока вы не ответили), а затем сформулируйте для него конкретный ответ. –