2011-03-25 55 views
0

嗨 我得到了一个模型类别和另一个模型产品。有关系 - has_and_belongs_to_many。Ruby On Rails 3 - 取得零例外,并不明白为什么

当我打开控制台并键入Category.first.products时,我收到附带该类别产品的列表。

但是,当我尝试生成与显示模型的XML文件,我得到:

undefined method `type' for nil:NilClass 

我测试过下面的代码上的其他车型我做了的has_many关系和它的作品怎么样我希望它能够工作。但不会与这种关系一起工作,也许它没有任何与此有关的东西?

def show 

@categories = Category.find(params[:id]) 

@products = @categories.products 

respond_to do |format| 
    format.html # index.html.erb 
    format.xml { render :xml => @products } 
    format.json { render :json => @products } 
end 

我是新来这个,你可以看到...

+0

在哪一行发生此错误? – 2011-03-25 10:25:06

+0

app/controllers/finder_controller.rb:28:在'block(2 levels)in show' – Philip 2011-03-25 10:29:12

+0

请提及哪行代码产生错误。我不知道哪一行是第28行。检查你的代码文件'finder_controller.rb'并告诉我什么是行28上写的。 – 2011-03-25 10:39:54

回答

1

感谢您的回复,我继续调查并对控制器进行了实验,并试用了。 @ category.products。 全部,它的工作。可悲的是,我不知道它为什么这样做...特别是当它在控制台中对我有用时...但是我想我很高兴能以某种方式解决问题......

def show 
@category = Category.find(params[:id]) 

@products = @category.products.all 

respond_to do |format| 
    format.html # show.html.erb 
    format.xml { render :xml => @products } 
end 

但我会使用日志和终端采集器,当我调试比以前更多!感谢您的提示!

0

在这种情况下,它看起来像你的问题是由一些奇怪的(可能不一致)数据引起的。尝试查看(在您的控制台中)导致问题的对象 - 在您的控制器中使用了一些特定的ID。检查Category.find(THIS_IS).products.to_xml是否也发生错误。

检查单个产品是否能够响应.to_xml返回有用的内容。

你会经常遇到类似的问题。你应该学习如何调试它们。

首先要看回溯。您可能会在您的Web浏览器中看到它,但所有异常通常也都放在您的日志/ development.log中(取决于环境)。

在开发日志中,您会看到SQL查询在出现错误之前运行。有时他们可能会帮助你找到问题所在。在这种情况下,您可以检查错误发生之前选择哪种类型的模型。 (这只是一个线索,而不是一个解决方案)

在回溯中,您会看到您编辑的文件。通常这个错误将会出现在你的代码中。如果你的代码看起来不错,你可能想看看backtrace中提到的其他文件。阅读Rails的代码可能会给你一些线索。有时。

还有一个问题:您是否在模型中混淆了一个名为'type'的属性?如果是,则尝试将此属性重命名为其他内容。

我们不能给你更准确的答案。我希望你会发现这个问题。另外,在开始修复错误之前,请尝试为此编写一个单元测试:检查在测试数据库中的某个模型上调用.to_xml是否引发异常。

+0

感谢您的提示,在下面发布了一个解决方案! – Philip 2011-03-25 14:41:32