开发者

Can't dup NilClass on association methods

开发者 https://www.devze.com 2022-12-20 08:55 出处:网络
I\'m using rails 2.3.5 and ruby 1.8.7. I\'m building asimple TODO manager. Where I have tasks that belong to a user and a user has many tasks.

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?

0

精彩评论

暂无评论...
验证码 换一张
取 消