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
私はただのだろうか:
- この問題に対する組み込みのソリューションは既に存在しますか?
- 私の実装には、表示されない欠陥がありますか?