【发布时间】:2012-10-14 20:01:48
【问题描述】:
我想覆盖/扩展 Rails has_one 关联方法,以便它始终返回关联类的实例。 (如果数据库中不存在,我想创建一个新的并将其分配给父实例。)
理想情况下,我想通过built-in Rails association extension mechanism 来完成此操作。但是,我不知道“getter”方法的名称,所以我不知道要覆盖什么。
如何覆盖关联 getter,以便在它为 nil 时实例化一个新对象?
【问题讨论】:
-
覆盖 has_one 关联宏可能会导致流泪。我选择 1) 回填缺失数据的迁移和 2) 在父资源上具有 after_create 侦听器的观察者。
-
@TomL:我会记住这一点,但在这种特殊情况下,我希望实际实例(不仅仅是数据)在引用时立即可用(并且之前不存在) .
-
你可以在父控制器中处理它。在
new操作中执行@parent = Parent.new(:child => Child.new)之类的操作。在edit操作中执行@parent = Parent.find(params[:id])然后@parent.child = Child.new unless @parent.child.present?。类似的东西。
标签: ruby-on-rails ruby-on-rails-3 associations has-one