我们正在使用Ruby on Rails。 ActiveRecord以MySQL作为数据库。
我们有order和order_items之间的关联。订单包含1个或更多order_items。 所以我们可以执行以下操作(1029是订单ID)
o=Order.find 1029
o.order_items
是否可以仅在内存中操作活动记录关联(例如,删除订单的某些订单项)而不保存对数据库的更改? 如果是这样,你会怎么做?
我们有一个遍历订单订单商品的方法,如果我们能够做到,我们的生活会更容易。
谢谢。
答案 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,就像您可以从数组中删除某些元素一样。
有很多方法可以从数组中删除元素。一些值得注意的方法是pop
,drop
,shift
,compact
,delete
,uniq
等。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