不能在关联方法上复制 NilClass [英] Can't dup NilClass on association methods

查看:38
本文介绍了不能在关联方法上复制 NilClass的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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.

我使用 acts_as_taggable_on_steroids 插件进行标记任务,使用 restful_authentication 插件 进行注册和用户管理.

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

我收到一个奇怪的错误,在索引操作的视图上显示为无法复制 NilClass".这是控制器代码 -

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

当我在视图上迭代 @tasks 时发生错误.那就是当我做 @tasks.each do |task|

The error 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.

编辑

好的,这绝对是一个缓存问题.如果我做config.cache_classes = true 在 production.rb 中,同样的错误在生产模式下也会发生.但我现在如何解决这个问题?因为我不想为我在模型/控制器中所做的每一次更改都重新加载服务器.

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.

编辑

这是我的用户模型的样子

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

希望这会有所帮助.

推荐答案

明白了.

来自这里

某些类继承或包含在您的引擎控制器中可能无法卸载并导致第一次请求后的麻烦你的系统.

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.

对我来说,这是因为我在 lib 中有一个文件是猴子修补用户模型和我想这个文件中的用户模型类没有被缓存.

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.

在 lib 文件夹中的那个类中调用 unloadable 就可以了.所以我的 lib 文件看起来像这样

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

还是谢谢.

这篇关于不能在关联方法上复制 NilClass的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆