Ruby получит размер в байтах массива - PullRequest
10 голосов
/ 11 февраля 2012

Я хотел бы получить размер в байтах содержимого массива (элементов) в рубине.

Я заполняю свой массив так:

  @records.each do |record|
    items << { :table => table, :id => record.id, :lruos => record.updated_at }
  end

На самом деле, я хочу принудительно отправить Content-Length этого массива, когда я сериализую его в JSON:

respond_to do |format|
  #response['Content-Length'] = items.to_s.size
  format.json { render :json => { :success => "OK", :items => items } }
end

Так что любая идея сделать это может быть интересной. (по причине, по которой я не знаю, длина контента не отправляется, поэтому я хочу форсировать ее)

Я использую Rails 3.0.5.

Ответы [ 2 ]

7 голосов
/ 11 февраля 2012

Как сказал WTP, вы, вероятно, намереваетесь вернуть размер представления JSON вместо представления ruby ​​массива, потому что JSON является фактическим ответом для браузера.Вы можете сделать это заранее, кодируя (получая строку), а затем проверяя ее размер.

response['Content-Length'] = ActiveSupport::JSON.encode(items).size

Подробнее о сериализации JSON и рельсах

1 голос
/ 24 апреля 2016

Для тех, кто все еще задается вопросом - я нашел, что это работает

ActiveSupport::JSON.encode(items).size.to_s

Который, спустя много лет, может кому-то помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...