AR アソシエーションが存在する場合は検索し、存在しない場合は作成するモデル インスタンス メソッドを作成しています。最初の検索の後、データベースが再度クエリされないようにするにはどうすればよいですか? 以下にこの方法の 2 つのバージョンがありますが、どちらにも欠点があります。
このメソッドは毎回クエリを実行するため、非効率的です。
def cart
carts.order('created_at desc').where(:purchased_at => nil).first || carts.create
end
このメソッドは db ルックアップを 1 回だけ実行しますが、cart.destroy などの後に同期が取れなくなります。
def cart
@cart_ || @cart_ = carts.order('created_at desc').where(:purchased_at => nil).first || @cart_ = carts.create
end