I'm using rails 2.3.5 and ruby 1.8.7. I'm building a simple TODO manager. Where I have tasks that belong to a user and a user has many tasks.
I'm using acts_as_taggable_on_steroids
plugin for tagging tasks and restful_authentication plugin
for registration and user management.
I'm getting a weird error that reads "Can't dup NilClass" on the view of index action. This is what the controller code is -
@tasks = current_user.tasks
The erro开发者_如何学Pythonr occurs when I'm iterating over @tasks
on the view. That is when I do @tasks.each do |task|
Now when I replace the controller code with this
@tasks = Task.find(:all, :conditions => {:user_id => current_user.id})
Which is actually fetching the same records. This happen only in development mode. I am guessing this has something to do with caching or loading.
What could be wrong? I'm facing this issue for the first time.
EDIT
Okay, this is definitely a caching issue. If I make
config.cache_classes = true
in production.rb, the same error occurs in production mode as well. But how do I fix that now? Because I don't want to be reloading the server for every change I make in models/controllers.
EDIT
Here is how my User model looks like
class User < ActiveRecord::Base
has_many :tasks
has_many :projects
# There are some validations and standard methods that resful authentication
# provides that I am not showing here
end
And this is how the Task model looks like.
class Task < ActiveRecord::Base
belongs_to :bin
belongs_to :project
belongs_to :user
acts_as_taggable
def tag_list
super.join(', ')
end
end
Task controller's index method looks like this
def index
@tasks = current_user.tasks
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @tasks }
end
end
Hope this helps.
Got it.
From here,
Some of the classes inherited or included in your engine controllers may fail to get unloaded and cause trouble after the first request to your system.
For me, it was because I had a file in the lib
that was monkey patching User model and the
User model class in this file was not getting cached I suppose.
Calling unloadable
in that class in the lib folder did the trick. So my lib file looks like this
class User < ActiveRecord::Base
unloadable
# stuff...
end
Thanks anyways.
Maybe there is something wrong with associations in model. Can you paste some code from there?
You can also try doing the same in console. Does it give the same error? Take a look in logs, do both of your examples generates the same sql query?
精彩评论