アクティブなレコードオブジェクトをコピーした後、新しいオブジェクトassociation.sizeは実際にデータベースに存在する数を2倍返します。私はそのサイズがキャッシュされたバージョンをロードしようとしているのを見ていて、実際にはクエリを実行していますが、その量を表示するためにSQLクエリを常に実行したくありません。 私の(関連)のコードは次のようになります。Ruby on Rails関連するActiveRecordのサイズは、モデルの複製後に2倍の数値を返します。
class Model1 < ActiveRecord::Base
def copy_model
new_model = self.dup
new_model.name = "Copy of #{name}"
new_model.association = association.map{|a| a.dup}
new_model.save
new_model
end
new_model.association上でこの呼び出し.sizeは二回.count
いいえ、間違った場所で行う必要があります。カウントとサイズは、どちらも同じ出力を与えます。また、上記のコードでは、関連を複製する際に構文エラーが発生します。 それ以外の場合、上記のコードはモデルをコピーするために完全に機能します。 –
try 'new_model.association.reload.count' – MrYoshiji
@MrYoshiji' count'はクエリであり、正確な結果を返します。 'array'がすでにロードされている場合、' size'はアソシエーション "Array"に対するメソッド呼び出しです。まだ存在していないオブジェクトが含まれていると、 'size'はcountと異なることがあります。 'reload'の有無にかかわらず' count'は同じ結果を返します。 – engineersmnky