0

Я пытаюсь получить записи из таблицы по хэш-значению. Вот запись пример:Получить записи по hash value

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

параметры хэш, и статус является ключевым фактором этого хэша –

+1

Какую версию Postgresql вы используете? Каков тип столбца 'parameters'? – Raffael

ответ

0

Это не легко найти в упорядоченном поле, но вы можете использовать LIKE с некоторыми ограничениями.

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

Это работает, но я предлагаю добавить пользовательские поля, так же, как то, что затронуло общественная деятельность владелец перл:

«Помимо нескольких полей, каждое действие имеет, вы можете также задает пользовательские поля. Это может быть очень полезно, поскольку параметры представляют собой сериализованный хеш-код , который не может быть легко запрошен из базы данных ».

+0

Но вы предполагаете, что модель использует 'serialize' для заполнения некоторого YAML в столбце' text'. PostgreSQL поддерживает столбцы JSON и hstore, которые могут хранить данные, подобные этому, и запрашивать его без шума YAML. –

+0

О, мой плохой для предположений. Но в соответствии с модельной структурой я вполне уверен, что он использует публичную активность вызова gem, в которой 'parameters' имеет столбец« text ». – pyfl88