1

我在这里有一个令人困惑的问题。我有两个模型,具有 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

为什么关系返回为零?

4

2 回答 2

1

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

在父模型上:

 has_one :child, :inverse_of => :parent

在儿童模型上:

 belongs_to :parent, :inverse_of => :child

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

希望有帮助!

于 2013-08-06T11:30:30.820 回答
1

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

self 可能是隐含的,因此这可能不是您的解决方案。

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

于 2011-01-07T14:45:58.157 回答