Rails-何时在代码/惯用Ruby/Rails代码中使用.reload



我经常听说在测试Rails应用程序时使用.reload很常见,但在实际的应用程序代码中呢?

下面的代码是有效的,但我一直在思考在这里使用.reload是否有点粗糙。特别是因为我正在做的操作(通过helper方法add_passenger添加到has_many关系,调用rotate!(看起来非常典型。

使用.reload可以吗?或者有更好的方法来构建我的代码吗?

def organize
Driver.find_each(&:clear_space)
untaken = Rider.unassigned
open_drivers = Driver.available
# assume enough seats for all riders
while untaken.reload.size > 0
cur = untaken.first
open_drivers.reload.each do |driver|
if cur.prefers_strongest?(driver: driver)
driver.add_passenger(rider: cur)
end
end
untaken.rotate! if cur.car.nil?
end
Car.all
end
class Driver < Person
has_one :car, inverse_of: :driver, dependent: :destroy
delegate :riders, :riders_count, :clear_space, to: :car
after_create :create_car!
scope :available, -> { joins(:car).where('riders_count < ?', :total_space) }
def clear_space
riders.delete_all if riders_count > 0
end
def add_passenger(rider:)
riders << rider if car.has_space?
end
def remove_passenger(rider:) 
riders.delete(rider) if riders.exists?(rider.id)
end
end

没有必要在顶级作用域上调用reload。这些调用没有缓存。缓存的是那些通过ActiveRecord实例进行的调用。

在这种情况下,可以使用reload丢弃整个记录上的缓存,也可以仅丢弃关联记录上的(如@user.rides.reload(缓存。

#reload实际上只是用来";刷新";或";重新干燥日期";一个记录或一组记录。因此,很难权威地说一个独立用户实际上只是一个通用工具,当需要数据库数据的第二个表示时可以使用。

但是的答案是,有更好的方法来构建我的代码吗

相关内容

  • 没有找到相关文章

最新更新