【问题标题】:Ruby On Rails 3 - Getting nil exception, and doesn't understand whyRuby On Rails 3 - 获得零异常,不明白为什么
【发布时间】:2011-03-25 10:22:01
【问题描述】:

嗨 我有一个模型类别和另一个模型产品。有关系 - has_and_belongs_to_many。

当我打开控制台并输入 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

结束

如您所见,我是新手...

【问题讨论】:

  • 这个错误发生在哪一行?
  • app/controllers/finder_controller.rb:28:in `block (2 levels) in show'
  • 请说明是哪一行代码产生了错误。我不知道第 28 行是哪一行。检查你的代码文件finder_controller.rb 并告诉我第 28 行写了什么。
  • 对不起,这段代码 --> format.xml { render :xml => @products }

标签: ruby-on-rails methods model undefined


【解决方案1】:

感谢您的回复,我继续对控制器进行调查和试验,并尝试使用。 @category.products.all,它奏效了。可悲的是,我不知道为什么会这样......尤其是当它在控制台中对我有用时......但我想我很高兴以一种方式解决了这个问题......

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

结束

但是我在调​​试的时候会比以前更多地使用日志和终端记录器!感谢您的提示!

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    还有一个问题:您是否在模型中弄乱了一个名为“类型”的属性?如果是,则尝试将此类属性重命名为其他名称。

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

    【讨论】:

    • 感谢您的提示,在下面发布了解决方案!
    猜你喜欢
    • 2015-10-19
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多