是否可以更改内存中的活动记录关联而不将其保存到数据库?

时间:2013-04-16 18:07:14

标签: ruby-on-rails activerecord

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

我们有order和order_items之间的关联。订单包含1个或更多order_items。 所以我们可以执行以下操作(1029是订单ID)

o=Order.find 1029
o.order_items

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

我们有一个遍历订单订单商品的方法,如果我们能够做到,我们的生活会更容易。

谢谢。

3 个答案:

答案 0 :(得分:0)

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

o2=Order.find 1029
o2.order_items

o3 = o2-o1

答案 1 :(得分:0)

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

有很多方法可以从数组中删除元素。一些值得注意的方法是popdropshiftcompactdeleteuniq等。Choose whichever methods that suit your needs here

答案 2 :(得分: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