不能在关联方法上复制 NilClass [英] Can't dup NilClass on association methods
问题描述
我使用的是 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屋!