【问题标题】:Why am I getting nil for a belongs_to relationship in Rails?为什么我在 Rails 中的 belongs_to 关系为零?
【发布时间】:2010-03-03 21:03:57
【问题描述】:

我在我的 Ruby on Rails 应用程序中遇到了一个问题,该应用程序的模型的 belongs_to 关系一直为 nil。

鉴于以下模型:

 class Chassis < ActiveRecord::Base
   belongs_to :model
   belongs_to :chassis_size
 end

 class Model < ActiveRecord::Base
    has_many :chassis
 end

 class ChassisSize < ActiveRecord::Base
    has_many :chassis
 end

现在,我希望在我的底盘索引视图中看到模型和底盘尺寸数据:

 <% @chassis.each do |chassis| %>
    <%= chassis.id %><br />
    <%= chassis.model.name %><br />
    <%= chassis.chassis_size.size %><br />
 <% end %>

但我得到一个错误,即 chassis_size.size 为 nil:

 You have a nil object when you didn't expect it!
 You might have expected an instance of Array.
 The error occurred while evaluating nil.size    

查看数据库中的数据,一切似乎都是正确的。

我不确定为什么 model 可以工作,但 chassis_size 不能。我错过了什么?为什么机箱尺寸数据似乎没有加载?

【问题讨论】:

    标签: ruby-on-rails activerecord belongs-to


    【解决方案1】:

    size 是您的 chassis_sizes 表中的一列吗?

    如果是这样,这是ruby中的保留字,因为它是返回数组长度的方法。

    每个机箱都有一个机箱尺寸吗?试试这个:

    <% @chassis.each do |chassis| %>
        <%= chassis.id %><br />
        <%= chassis.model.name %><br />
        <% if chassis.chassis_size %>
            <%= chassis.chassis_size.description %>
        <% else %>
            No chassis_size exists for this chassis
        <% end %><br />
     <% end %>
    

    【讨论】:

    • 是的,大小是一列。我接受我应该将其重命名为其他名称...但是...我在该表上也有一个描述列,使用它会导致“nil:NilClass 的未定义方法‘描述’”错误
    • 果然,我在迁移中漏掉了一个键,滚动数据时也没有看到NULL值。谢谢!
    • 我遇到了类似的问题......但我很确定数据是正确的......你是什么意思你“错过了钥匙”?你的意思是有些机箱是空的吗?或者他们的一些大小是空的?对我来说,如果我询问它所属的对象的类,它会起作用,但如果我询问该对象的属性,它会说它是一个空类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2015-11-04
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多