无法在关联方法上重复NilClass
我正在使用rails 2.3.5和ruby 1.8.7。 我正在建立一个简单的TODO经理。 我有属于用户的任务,用户有很多任务。
我正在使用acts_as_taggable_on_steroids
插件来标记任务,并使用restful_authentication plugin
进行注册和用户管理。
我在索引操作的视图中得到一个奇怪的错误,上面写着“无法复制NilClass”。 这是控制器代码 –
@tasks = current_user.tasks
当我在视图上迭代@tasks
时发生错误。 那是我做@tasks.each do |task|
现在我用这个替换控制器代码
@tasks = Task.find(:all, :conditions => {:user_id => current_user.id})
这实际上是获取相同的记录。 这只发生在开发模式中。 我猜这与缓存或加载有关。
可能有什么不对? 我是第一次面对这个问题。
编辑
好的,这绝对是一个缓存问题。 如果我在production.rb中生成config.cache_classes = true
,则生产模式中也会出现相同的错误。 但是我现在如何解决这个问题呢? 因为我不想为模型/控制器中的每个更改重新加载服务器。
编辑
这是我的用户模型的样子
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
这就是Task模型的样子。
class Task < ActiveRecord::Base belongs_to :bin belongs_to :project belongs_to :user acts_as_taggable def tag_list super.join(', ') end end
任务控制器的索引方法如下所示
def index @tasks = current_user.tasks respond_to do |format| format.html # index.html.erb format.xml { render :xml => @tasks } end end
希望这可以帮助。
得到它了。
从这里开始 ,
inheritance或包含在引擎控制器中的某些类可能无法卸载并在第一次请求系统后导致问题。
对我来说,这是因为我在lib
中有一个文件是猴子修补用户模型,我想这个文件中的用户模型类没有被缓存。
在lib文件夹中调用该类中的unloadable
可以解决问题。 所以我的lib文件看起来像这样
class User < ActiveRecord::Base unloadable # stuff... end
不管怎么说,多谢拉。
也许模型中的关联有问题。 你能从那里粘贴一些代码吗?
您也可以尝试在控制台中执行相同的操作。 它会给出同样的错误吗? 看看日志,你的两个例子都生成相同的SQL查询吗?