如何从rails中的ActiveRecord_Relation中删除最后一个元素?
e.g。如果我设置:
@drivers = Driver.all
我可以通过执行以下操作将另一个名为@new_driver的Driver对象添加到@drivers:
@drivers << @new_driver
但是如何从@drivers中删除对象?
删除方法似乎不起作用,即
@drivers.delete(0)
答案 0 :(得分:6)
您可以使用reject!
方法,这将从集合中删除对象而不影响db
例如:
driver_to_delete = @driver.first # you need the object that you want removed
@drivers.reject!{|driver| driver == driver_to_delete}
答案 1 :(得分:3)
问题的后期,但只是有同样的问题,并希望这有助于其他人。
reject!
在Rails 4.2中不适用于ActiveRecord_Relation
drop(1)
是解决方案
在这种情况下,@drivers.drop(0)
将删除关系的第一个元素
答案 2 :(得分:1)
由于它是一个对象数组,你是否曾尝试编写类似@ drivers.delete(@new_driver)或@ drivers.delete(id:@ new_driver.id)的内容?
答案 3 :(得分:0)
This is the documentation you need:
@group.avatars << Avatar.new
@group.avatars.delete(@group.avatars.last)
-
<强> .destroy
强>
您遇到的问题是您尝试在非集合对象上使用collection
方法。您需要使用.destroy
ActiveRecord方法来删除数据库中的记录(以及随后的集合):
@drivers = Driver.all
@drivers.last.destroy
-
<强>范围强>
.delete
将从数据库中删除记录
如果您想从数据库中提取特定元素以填充@drivers
对象,则需要使用scope
:
#app/models/driver.rb
Class Driver < ActiveRecord::Base
scope :your_scope, -> { where column: "value" }
end
这将允许您致电:
#app/controllers/drivers_controller.rb
def index
@drivers = Driver.your_scope
end
我认为你让MVC programming pattern感到困惑 - 数据操作应该发生在model
,而不是controller
答案 4 :(得分:0)
由于无法接受答案,因此这是Rails 5.2的解决方案
p +
scale_x_continuous(trans = 'log10',
breaks = x_vec)