Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 仅从内存中删除,不从数据库中删除_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 仅从内存中删除,不从数据库中删除

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

我有一个包含商店列表的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 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