3

我们正在使用 Ruby on Rails。以 MySQL 作为数据库的 ActiveRecord。

我们有 order 和 order_items 之间的关联。一个订单有 1 个或多个 order_items。所以我们可以做以下事情(1029是订单ID)

o=Order.find 1029
o.order_items

是否可以仅在内存中操作活动记录关联(例如,删除订单的某些订单项)而不将更改保存到数据库?如果是这样,你会怎么做?

我们有一个遍历订单的订单项的方法,如果我们能做到以上几点,我们的生活会容易得多。

谢谢你。

4

3 回答 3

0
o=Order.find 1029,1030,1031,1032
o.order_items

o2=Order.find 1029
o2.order_items

o3 = o2-o1
于 2013-04-16T18:11:57.167 回答
0

你问的是可能的。请记住,这o.order_items将返回一个order_item 实例数组。所以你可以在这个数组上使用任何你想要的方法。当然,您可以删除某些 order_items,就像您可以从数组中删除某些元素一样。

有很多方法可以从数组中删除元素。一些值得注意的方法是pop, drop, shift, compact,deleteuniq在此处选择适合您需要的方法

于 2013-04-16T18:19:28.077 回答
0

我想建议这种方法来删除内存中的 AR 对象。
将属性添加到负责将 AR 对象标记为已删除的相应模型(例如deleted属性):

   class OrderItem < ActiveRecord::Base
     ...
     attr_accessor :deleted

     def deleted
       @deleted || 'no'
     end
   end

将相应的对象标记为已删除:

o.order_items {|oi| oi.deleted = 'yes' if oi.id == 1029}

过滤 order_items 只设置未删除的行:

o.order_items do |oi| 
 unless oi.deleted == 'yes'
 ...
 end
end
于 2014-08-10T21:56:00.890 回答