我正在编写一个模型实例方法,如果它存在则应该找到一个 AR 关联,或者如果它不存在则创建它。我怎样才能做到这一点,以便在第一次查找后不再查询数据库?我在下面有这个方法的两个版本,但都有缺点。
这种方法每次都执行查询,效率低下。
def cart
carts.order('created_at desc').where(:purchased_at => nil).first || carts.create
end
此方法仅进行一次数据库查找,但在诸如 cart.destroy 之类的操作后会不同步。
def cart
@cart_ || @cart_ = carts.order('created_at desc').where(:purchased_at => nil).first || @cart_ = carts.create
end