不能对关联方法进行dup NilClass吗

时间:2021-01-08 20:40:48

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.

我使用的是rails 2.3.5和ruby 1.8.7。我正在构建一个简单的TODO管理器。我有属于用户的任务,用户有很多任务。

I'm using acts_as_taggable_on_steroids plugin for tagging tasks and restful_authentication plugin for registration and user management.

我使用acts_as_taggable_on_甾类插件来标记任务,使用restful_authentication插件进行注册和用户管理。

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 -

我有一个奇怪的错误,在索引操作的视图上读“不能使用NilClass”。这就是控制器代码

@tasks = current_user.tasks

The error occurs when I'm iterating over @tasks on the view. That is when I do @tasks.each do |task|

当我在视图上迭代@tasks时发生错误。这就是我做@tasks的时候。每个做| |任务

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.

这显然是一个缓存问题。如果我做配置。cache_classes = true。rb,同样的错误也发生在生产模式中。但是我现在该怎么做呢?因为我不想为我在模型/控制器中做的每一个更改重新加载服务器。

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.

希望这个有帮助。

2 个解决方案

#1


5  

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.

对我来说,这是因为我在库中有一个文件是monkey patching用户模型,这个文件中的User model类没有被缓存。

Calling unloadable in that class in the lib folder did the trick. So my lib file looks like this

在lib文件夹中调用该类中的unloadable实现了这一功能。我的库文件是这样的

class User < ActiveRecord::Base
  unloadable
  # stuff...
end

Thanks anyways.

不管怎样,谢谢你。

#2


0  

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?

您也可以尝试在控制台执行相同的操作。它会产生同样的错误吗?查看日志,您的两个示例是否生成相同的sql查询?

#1


5  

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.

对我来说,这是因为我在库中有一个文件是monkey patching用户模型,这个文件中的User model类没有被缓存。

Calling unloadable in that class in the lib folder did the trick. So my lib file looks like this

在lib文件夹中调用该类中的unloadable实现了这一功能。我的库文件是这样的

class User < ActiveRecord::Base
  unloadable
  # stuff...
end

Thanks anyways.

不管怎样,谢谢你。

#2


0  

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?

您也可以尝试在控制台执行相同的操作。它会产生同样的错误吗?查看日志,您的两个示例是否生成相同的sql查询?