我这里有一个令人困惑的问题。我有两个模型,具有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
为什么关系被归为零?
答案 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
希望有所帮助!