刚刚发现个问题。举例来说明,譬如有两个实体,person和job,如果是多对多的关系
那么可以在插入某个person的工作数据时这么写代码:
@person=People.find(:id)
@job=@person.jobs.build(params[:job])
@job.save
------但是如果person和job是一对一的关系呢。
就不能这么做了,不能写
@person=People.find(:id)
@job=@person.job.build(params[:job])
@job.save
这样会发生错误
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.build
The error occurred while evaluating nil.build
所以一对一的情况下可以这么写:
@person=People.find(:id)
@person.job=Job.new(params[:job])
@person.job.save
-----------------------------------------------------------------------------
原因在于@person.jobs是一个数组。即使为空也是空数组[]
而@person.job不是数组,而是一个job对象,所以会出现空对象调用build方法失败
----------
这种情况下还可以适用方法
@job.build_job(params[:job])
来解决
本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/121832,如需转载请自行联系原作者