Я делаю AJAX-вызов этого метода контроллера:

def search_posts keyword = params[:keyword] results = @client.query("SELECT * FROM posts WHERE keyword = '#{keyword}'") posts = [] results.each do |row| posts {amp}lt;{amp}lt; { media_id: row["media_id"], media_type: row["media_type"], caption: row["caption"] } end @client.close render json: posts end 

и мой JavaScript выглядит так:

 $.ajax({ url: '/search_posts', type: "get", data: { keyword: keyword }, success: function(res) { console.log(res); } }); 

Однако, когда я console.log возвращаю JSON, некоторые из media_ids на единицу меньше действительного значения. Например, media_id, который должен быть 17924518156307537 , зарегистрирован в браузере как 17924518156307536 .

Я поместил хеш posts перед render json: line и media_ids в этот момент верны. Что очень странно, так это то, что это происходит только с некоторыми media_ids, а не со всеми.

Наконец, понял: JavaScript поддерживает только до 53-битных целых чисел, а некоторые из media_ids были больше. Решил это путем преобразования media_ids в строки в Ruby перед отправкой их клиенту.