在 rails 3.2+ 中,您可以这样做:
SomeModel.some_scope.first_or_initialize
这意味着您还可以执行以下操作:
OtherModel.some_models.first_or_initialize
我发现这非常有用,但我想first_or_build
在我的关联上有一个方法has_many
,它的作用就像first_or_initialize
但也会在需要时向关联添加一条新记录build
。
更新澄清:是的,我知道first_or_initialize
和first_or_create
。问题是,first_or_initialize
不会将初始化的记录添加到关联的目标build
中,并且first_or_create
......好吧......创建一个记录,这不是意图。
我有一个有效的解决方案,使用关联扩展:
class OtherModel < ActiveRecord::Base
has_many :some_models do
def first_or_build( attributes = {}, options = {}, &block )
object = first_or_initialize( attributes, options, &block )
proxy_association.add_to_target( object ) if object.new_record?
object
end
end
end
我只是想知道是否:
- 这个问题的内置解决方案已经存在?
- 我的实现有我看不到的缺陷?