Почему id изменился на _id, когда я использую кеш rails для получения данных

Я использую Rails с Grape и Mongo, я хочу использовать кеш Rails для оптимизации производительности, и это мой код:

Rails.cache.fetch(cache_key, expires_in: 1.hour) do
    render_template('chatrooms/info', {chatroom: chatroom, user:current_user, group: chatroom.group})
end

кеш действителен, но возвращаемые данные изменены.

добавить кеш раньше, вернуть данные:

chatroom: {
   name: "磁场",
   id: "573c025cc5ffa353c7000000",
   owner_id: "56a8b4c9feec620985000000",
   avatar: "http://o2zuoh5os.qnssl.com/icon_magnet.png"
}

в противном случае после добавления кэша возвращаемыми данными являются:

chatroom: {
   name: "磁场",
   _id: "573c025cc5ffa353c7000000",
   owner_id: "56a8b4c9feec620985000000",
   avatar: "http://o2zuoh5os.qnssl.com/icon_magnet.png"
}

поле 'id' изменено на '_id'

Я не знаю, что случилось, как решить эту проблему?

1 ответ

@wind, так что в основном MongoDB создать _id поле для каждого документа. В mongoid они специально называют методы атрибутов _id и setter/getter для id

Это фрагмент кода из mongoid-6.0.2/lib/mongoid/fields.rb файл

  self.aliased_fields = { "id" => "_id" }
  self.fields = {}
  self.localized_fields = {}
  self.pre_processed_defaults = []
  self.post_processed_defaults = []

  field(
    :_id,
    default: ->{ BSON::ObjectId.new },
    pre_processed: true,
    type: BSON::ObjectId
  )

  alias :id :_id
  alias :id= :_id=
end

Итак, оба id & _id здесь одно и то же, просто какой код предпочитает какой.

Другие вопросы по тегам