Ruby on rails 仅从内存中删除,不从数据库中删除
我有一个包含商店列表的ActiveRecord数组Ruby on rails 仅从内存中删除,不从数据库中删除,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个包含商店列表的ActiveRecord数组 shops = Shop.find(:all) 我想从商店中删除一条记录,而不从数据库中删除它 shops.delete(a_shop)将导致一个delete SQL查询。我只想从ActiveRecord数组中删除商店,但不想从数据库中删除 这能做到吗 谢谢我认为您无法从阵列中删除该项目 shops = Shop.find(:all) shops.delete(shops[0]) #deletes the first item from th
shops = Shop.find(:all)
我想从商店中删除一条记录,而不从数据库中删除它
shops.delete(a_shop)
将导致一个delete SQL查询。我只想从ActiveRecord数组中删除商店,但不想从数据库中删除
这能做到吗
谢谢我认为您无法从阵列中删除该项目
shops = Shop.find(:all)
shops.delete(shops[0]) #deletes the first item from the array, not from the DB
但是,您应该能够修改find以返回数组,而最初不使用该商店。比如:
shops = Shop.find(:all, :conditions => "id NOT #{a_shop.id}")
应该符合你的要求。这样一来,您一开始就不会得到容器中的商店,但它不会影响数据库。当我进行一些测试时,调用delete方法实际上不会从数据库中删除元素。仅从阵列中删除
shops = Shop.find(:all)
shops.delete(shops[0]) #deletes the first item from the array, not from the DB
要从数据库中删除,请执行以下操作:
shops = Shop.find(:all)
Shop.delete(shops[0].id)
看到区别了吗?至少,这是我的Rails 2.1设置的工作原理
-JP小心如果您使用的是has\u许多关系,JP的答案将不起作用 扩展示例:
class City < ActiveRecord::Base
has_many :shops
end
city = City.find(:name => "Portland")
将从数据库中删除
也
将从数据库中删除
与DB分离的一种方法是使用compact或其他类似的数组函数:
theshops = city.shops.compact
theshops.delete(ss[0])
不会从数据库中删除
此外,在所有情况下,如果不会从数据库中删除,则删除\u:
city.shops.delete_if {|s| s.id == city.shops[0]}
干杯
别忘了:如果你对这些事情有疑问,脚本/控制台就是你的朋友 我想建议这样的方法来删除内存中的AR对象。
向负责将AR对象标记为已删除的相应模型添加属性(例如,
deleted
attribute):
类OrderItem def deleted
@deleted || 'no'
end
结束
将适当的对象标记为已删除:
o.order_items {|oi| oi.deleted = 'yes' if oi.id == 1029}
筛选订单\仅设置了未删除行的项目:
o.order_items do |oi|
unless oi.deleted == 'yes'
...
end
end
这只会起作用一次,但如果需要移除多个店铺,则必须执行其他操作。您可以从阵列中删除项。
o.order_items do |oi|
unless oi.deleted == 'yes'
...
end
end