仅从内存中删除而不是从数据库中删

Tar*_*her 3 activerecord ruby-on-rails

我有一个包含商店列表的ActiveRecord数组.

shops = Shop.find(:all)
Run Code Online (Sandbox Code Playgroud)

我想删除商店中的记录而不从数据库中删除它.

shops.delete(a_shop)会导致删除SQL查询.我只想从ActiveRecord数组中删除商店,而不是数据库.

可以这样做吗?

谢谢

bpa*_*aul 9

请注意,如果您使用has_many关系,则JP的答案将无效.

扩展示例:

class City < ActiveRecord::Base
  has_many :shops
end

city = City.find(:name => "Portland")
Run Code Online (Sandbox Code Playgroud)

然后

city.shops.delete(city.shops[0])
Run Code Online (Sandbox Code Playgroud)

删除数据库!

theshops = city.shops
theshops.delete(ss[0])
Run Code Online (Sandbox Code Playgroud)

从数据库中删除

从数据库中分离的一种方法是使用紧凑或其他数组函数,如下所示:

theshops = city.shops.compact
theshops.delete(ss[0])
Run Code Online (Sandbox Code Playgroud)

不会从DB中删除

此外,在所有情况下,delete_if都不会从db中删除:

city.shops.delete_if {|s| s.id == city.shops[0]}
Run Code Online (Sandbox Code Playgroud)

干杯!

不要忘记:如果您对这些事情有疑问,脚本/控制台就是您的朋友!


JP *_*son 5

当我做一些测试时,调用delete方法实际上并没有从数据库中删除该元素.仅来自阵列.

shops = Shop.find(:all)
shops.delete(shops[0]) #deletes the first item from the array, not from the DB
Run Code Online (Sandbox Code Playgroud)

要从DB中删除:

shops = Shop.find(:all)
Shop.delete(shops[0].id)
Run Code Online (Sandbox Code Playgroud)

看到区别?至少,这是如何在我的Rails 2.1设置上工作.

-J.P