Почему 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 здесь одно и то же, просто какой код предпочитает какой.