Mongoid 2.4.4 Rails 3.2.1 MongoDB 2.0.1
I have 3 models:
Authentication、Favorite and Content。
It just like a Many to Many relations from Authentication to Content through Favorite.
When I query like this :
@favorites = Favorite.any_in(authentication_id: list).includes(:content, :authentication).desc(:collected_at).page params[:page]
@favorites works fine
@favorites's content also works fine.
But @favorites' authentication only has _id, all of others field is nil
When I set identity_map_enabled: false, it fixed.
Is this a bug for identity_map?
Here is some information for tracert,
You can see f.weibo.name is nil
when identity map enabled.
How can I fix this issue when identity_map_enabled: true?
--------------------- Models ---------------------------------
class Authentication
include Mongoid::Document
include Mongoid::Timestamps
include Service::Weibo::Api::Oauth
cache
field :_id, :type => Integer
field :uid, :type => Integer
field :name, :type => String
has_many :favorites
end
class Favorite
include Mongoid::Document
include Mongoid::Timestamps
cache
paginates_per 20
field :collected_at, :type => Time, :default => Time.now
belongs_to :authentication
belongs_to :content
def weibo
self.authentication
end
def weibo_ids
self.authentication_ids
end
end
class Content
include Mongoid::Document
include Mongoid::Timestamps
cache
field :text, :type => String
has_many :favorites
end
-------------- Debug code: -----------------------
logger.debug "list: #{list}"
@favorites = Favorite.any_in(authentication_id:
list).includes(:content, :authentication).desc(:collected_at).page
params[:page]
@favorites.each do |f|
logger.debug f
logger.debug "name: #{f.weibo.name}"
logger.debug "before name: #{@favorites.first.weibo.name}"
clist = [764826410]
# cf = Favorite.any_in(content_id:
clist).includes(:content, :authentication)
logger.debug "after query name: #{@favorites.first.weibo.name}"
# cf.each {|f| logger.debug "cname: #{f.weibo.name}" }
logger.debug "after logger name: #{@favorites.first.weibo.name}"
--------- Debug code end ---------------------
--------- LOG identity_map_enabled: true --------------------
[0408 12:42:38(3129)DEBUG] list: [1751951491]
15 [0408 12:42:38(3129)DEBUG] MONGODB
weibofav_development['system.namespaces'].find({})
16 [0408 12:42:38(3129)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(20).sort([[:collected_at, :desc]])
17 [0408 12:42:38(3129)DEBUG] #<Favorite _id:
4f80c04953cd210b56000003, _type: nil, created_at: 2012-04-07 22:31:37
UTC, updated_at: 2012-04-07 22:31:37 UTC, collected_at
: 2012-04-07 20:46:37 UTC, authentication_id: 1751951491,
content_id: 3418929751988429>
18 [0408 12:42:38(3129)DEBUG] name:
19 [0408 12:42:38(3129)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(-1).sort([[:collected_at, :desc]])
20 [0408 12:42:38(3129)DEBUG] before name:
21 [0408 12:42:38(3129)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(-1).sort([[:collected_at, :desc]])
22 [0408 12:42:38(3129)DEBUG] after query name:
23 [0408 12:42:38(3129)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(-1).sort([[:collected_at, :desc]])
24 [0408 12:42:38(3129)DEBUG] after logger name:
25 [0408 12:42:38(3129)DEBUG] #<Favorite _id:
4f80c04953cd210b56000005, _type: nil, created_at: 2012-04-07 22:31:37
UTC, updated_at: 2012-04-07 22:31:37 UTC, collected_at
: 2012-04-07 20:46:37 UTC, authentication_id: 1751951491,
content_id: 3418840442279122>
26 [0408 12:42:38(3129)DEBUG] name:
27 [0408 12:42:38(3129)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(-1).sort([[:collected_at, :desc]])
28 [0408 12:42:38(3129)DEBUG] before name:
29 [0408 12:42:38(3129)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(-1).sort([[:collected_at, :desc]])
30 [0408 12:42:38(3129)DEBUG] after query name:
31 [0408 12:42:38(3129)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(-1).sort([[:collected_at, :desc]])
32 [0408 12:42:38(3129)DEBUG] after logger name:
33 [0408 12:42:38(3129)DEBUG] #<Favorite _id:
4f80c04953cd210b56000007, _type: nil, created_at: 2012-04-07 22:31:37
UTC, updated_at: 2012-04-07 22:31:37 UTC, collected_at
: 2012-04-07 20:46:37 UTC, authentication_id: 1751951491,
content_id: 3368827987931269>
--------- LOG identity_map_enabled: false --------------------
17 [0408 12:37:53(3092)DEBUG] list: [1751951491]
18 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['system.namespaces'].find({})
19 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(20).sort([[:collected_at, :desc]])
20 [0408 12:37:53(3092)DEBUG] #<Favorite _id:
4f80c04953cd210b56000003, _type: nil, created_at: 2012-04-07 22:31:37
UTC, updated_at: 2012-04-07 22:31:37 UTC, collected_at
: 2012-04-07 20:46:37 UTC, authentication_id: 1751951491,
content_id: 3418929751988429>
21 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['authentications'].find({:_id=>1751951491}).limit(-1).sort([[:_id, :asc]])
22 [0408 12:37:53(3092)DEBUG] name: magazine
23 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(-1).sort([[:collected_at, :desc]])
24 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['authentications'].find({:_id=>1751951491}).limit(-1).sort([[:_id, :asc]])
25 [0408 12:37:53(3092)DEBUG] before name: magazine
26 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(-1).sort([[:collected_at, :desc]])
27 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['authentications'].find({:_id=>1751951491}).limit(-1).sort([[:_id, :asc]])
28 [0408 12:37:53(3092)DEBUG] after query name: magazine
29 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(-1).sort([[:collected_at, :desc]])
30 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['authentications'].find({:_id=>1751951491}).limit(-1).sort([[:_id, :asc]])
31 [0408 12:37:53(3092)DEBUG] after logger name: magazine
32 [0408 12:37:53(3092)DEBUG] #<Favorite _id:
4f80c04953cd210b56000005, _type: nil, created_at: 2012-04-07 22:31:37
UTC, updated_at: 2012-04-07 22:31:37 UTC, collected_at
: 2012-04-07 20:46:37 UTC, authentication_id: 1751951491,
content_id: 3418840442279122>
33 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['authentications'].find({:_id=>1751951491}).limit(-1).sort([[:_id, :asc]])
34 [0408 12:37:53(3092)DEBUG] name: magazine
35 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(-1).sort([[:collected_at, :desc]])
36 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['authentications'].find({:_id=>1751951491}).limit(-1).sort([[:_id, :asc]])
37 [0408 12:37:53(3092)DEBUG] before name: magazine
38 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(-1).sort([[:collected_at, :desc]])
39 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['authentications'].find({:_id=>1751951491}).limit(-1).sort([[:_id, :asc]])
40 [0408 12:37:53(3092)DEBUG] after query name: magazine
41 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['favorites'].find({:authentication_id=>{"$in"=>[1751951491]}}).limit(-1).sort([[:collected_at, :desc]])
42 [0408 12:37:53(3092)DEBUG] MONGODB
weibofav_development['authentications'].find({:_id=>1751951491}).limit(-1).sort([[:_id, :asc]])
43 [0408 12:37:53(3092)DEBUG] after logger name: magazine
Rails 3.2.1, Mongoid 2.4.8, MongoDB 2.0.4
I replicated your code, except that I do not have Service::Weibo::Api::Oauth nor a working Weibo account to attempt testing that aspect. However, I have the following results and notes that I hope will help.
The authentication_id and content_id are Mongoid generated reference relations that are of type BSON::ObjectId which have a hex identifier string. In your debug code and log, (incorrect) fixnums are shown, so you may want to check this and make sure that your queries are correct.
The following works for me, with results as expected, no nil fields except the ones except for _type, without modifying identity_map. You probably should suspect not using proper BSON::ObjectId's or your Weibo code. Hope that this helps.
-Gary