2016-10-26 37 views
0

我用葡萄和蒙戈Rails的,我想用Rails的緩存來優化性能,這是我的代碼:爲什麼ID改變時,我用它來_id軌道緩存以獲取數據

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是同樣的事情在這裏,它只是其中的代碼更喜歡哪一個。

相關問題