2016-10-26 7 views
0
나는 포도와 몽고와 레일을 사용하고

, 나는 성능을 최적화하기 위해 레일 캐시를 사용 싶어 데이터를 얻을 레일,이 내 코드입니다 :캐시가

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 특성 별명 & 세터/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 모두 똑같은 코드가 선호하는, 여기의 단지되어있다 어느 것.