Подтвердить что ты не робот

Хранение массивов в базе данных: JSON и сериализованный массив

Я хочу сохранить массив из трех элементов: последние 3 комментария сообщения. Я знаю, что я мог бы присоединиться к таблице комментариев к сообщению, но я бы избегал этого тяжелого запроса для масштабирования.

Итак, мне было интересно, как лучше всего сохранить эти 3 элемента, так как я хотел бы легко их обновлять каждый раз при создании нового комментария: удалите последний комментарий и добавьте новый.

Каков правильный способ сделать это? Хранить его в сериализованном массиве или в объекте JSON?

4b9b3361

Ответ 1

Вы можете хранить массивы и хэши с помощью объявления ActiveRecord serialize:

class Comment < ActiveRecord::Base
  serialize :stuff
end

comment = Comment.new  # stuff: nil
comment.stuff = ['some', 'stuff', 'as array']
comment.save
comment.stuff # => ['some', 'stuff', 'as array']

Вы можете указать имя класса, к которому должен иметь тип объекта (в данном случае Array). Это более ясно и немного безопаснее. Вам также не придется создавать массив при назначении первого значения, так как вы сможете добавить к существующему (пустому) массиву.

class Comment < ActiveRecord::Base
  serialize :stuff, Array
end

comment = Comment.new  # stuff: []
comment.stuff << 'some' << 'stuff' << 'as array'

Вы даже можете использовать опрятную версию под названием store: http://api.rubyonrails.org/classes/ActiveRecord/Store.html

Это должно обрабатывать ваш прецедент с использованием встроенного метода.