I''m using Rails 3.0.0rc and have the following models:
class User
has_many :readings
has_many :conversations, :through=>:readings
end
class Reading
belongs_to :user
belongs_to :conversation
end
class Conversation
has_many :readings
has_many :users, :through=>:readings
end
and this controller code:
class ConversationsController
def show
@user = User.find(params[:user_id])
@conversation = @user.conversations.find(params[:id])
debugger
end
end
After requesting conversations#show, go to debug console and:
> User.class.object_id
=> 116350> @conversation.users.first.class.object_id
=> 33660870> @conversation.users.first.instance_of? User
=> true # Right
Then leave debugging and request the page again:> User.class.object_id
=> 116350> @conversation.users.first.class.object_id
=> 36497930> @conversation.users.first.instance_of? User
=> true # Right
And then, request the page again:> User.class.object_id
=> 116350> @conversation.users.first.class.object_id
=> 36497930> @conversation.users.first.class.to_s == User.to_s
=> true> @conversation.users.first.instance_of? User
=> false # Wrong!
This last evaluation is wrong, and breaks equality checks and
expressions such as @conversation.users.include?(some_user)
If I disable class caching, the problem disappears (but that''s not
ideal for development). Maybe I''m doing something that breaks
@reflection in association_proxy.rb? Any ideas?
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com.
To unsubscribe from this group, send email to
rubyonrails-core+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-core?hl=en.
On 29 Aug 2010, at 03:34, Jose wrote:> This last evaluation is wrong, and breaks equality checks and > expressions such as @conversation.users.include?(some_user) > > If I disable class caching, the problem disappears (but that''s not > ideal for development). Maybe I''m doing something that breaks > @reflection in association_proxy.rb? Any ideas?It looks as though you''re keeping a reference to the conversation object between requests. The association class is cached in the association''s reflection information and if you don''t re-create the object every request you''ll get an old copy of the User class. This only affects development mode where the classes are reloaded on every request. You can reproduce the effect in the console:>> c = Conversation.first=> #<Conversation id: 1, created_at: "2010-08-30 05:07:14", updated_at: "2010-08-30 05:07:14">>> c.users.first.instance_of?(User)=> true>> reload!Reloading... => true>> c.users.first.instance_of?(User)=> false>> c = Conversation.first=> #<Conversation id: 1, created_at: "2010-08-30 05:07:14", updated_at: "2010-08-30 05:07:14">>> c.users.first.instance_of?(User)=> true Andrew -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.