无法通过has_one访问孩子的父母

时间:2011-01-07 14:32:44

标签: ruby-on-rails nested has-one

我这里有一个令人困惑的问题。我有两个模型,具有has_one关系。我有一个使用fields_for创建子实例的表单。但是,当我尝试从子模型访问父项时,它只会得到一个零。

我试图提供以下问题的简明示例:

class Parent
  has_one :child
  accepts_nested_attributes_for :child
  attr_accessible :child_attributes
end

class Child
  belongs_to :parent
  validate :parent_is_called_mum

  def parent_is_called_mum
    parent.name.equals?("mum")
  end
end

问题是parent.name.equals?("mum")会返回错误:

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.name

为什么关系被归为零?

2 个答案:

答案 0 :(得分:1)

我不确定,但请尝试使用self.parent.name.equals?("mum")

自我可能是隐含的,所以这可能不是你的解决方案。

编辑:在您的数据库中,您确定parent_id表中的列childs不为空吗?如果是,那么self.parent返回null是正常的。我没有意思。

答案 1 :(得分:1)

尝试将属性 inverse_of 添加到关联的每一侧:

父模型上的

 has_one :child, :inverse_of => :parent

关于儿童模特:

 belongs_to :parent, :inverse_of => :child

在这里,寻找“双向关系”: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

希望有所帮助!