我從Rails查找查詢中得到結果集。我想迭代該結果集並根據結果集中的某些條件刪除記錄,然後將其傳遞給進一步處理。額外的標準是在數據庫中保存的數據的外部,因此我不能將它們包括在原始的「查找」查詢中。如何從Activerecord查詢結果集中刪除項目?
注意我不想從數據庫中刪除任何記錄,只是將它們從結果集中刪除。
請有人給我的代碼來做到這一點。
我從Rails查找查詢中得到結果集。我想迭代該結果集並根據結果集中的某些條件刪除記錄,然後將其傳遞給進一步處理。額外的標準是在數據庫中保存的數據的外部,因此我不能將它們包括在原始的「查找」查詢中。如何從Activerecord查詢結果集中刪除項目?
注意我不想從數據庫中刪除任何記錄,只是將它們從結果集中刪除。
請有人給我的代碼來做到這一點。
您可以使用delete_at
太:
irb(main):005:0> c = Category.all
Category Load (0.3ms) SELECT "categories".* FROM "categories"
=> [#<Category id: 1, name: "15 anos", description: nil, created_at: "2011-09-22 04:52:53", updated_at: "2011-09-22 04:52:53">]
irb(main):006:0> c.delete_at(0)
=> #<Category id: 1, name: "15 anos", description: nil, created_at: "2011-09-22 04:52:53", updated_at: "2011-09-22 04:52:53">
irb(main):007:0> c
=> []
這將從數據庫中刪除條目,對吧? – JustBasti
如果一些處理必須在應用程序代碼,SQL完成能夠 不這樣做,並且結果必須是已更改的查詢對象,通過id
重新查詢對象可能是一個(非常非常低效的內存)選項。
needed_ids = Model.where(<some original query>).map{|r| r.something? ? r.id : nil }.compact
new_collection = Model.where(id: needed_ids)
你有沒有找到你要找的東西? – Magnum
這可以關閉爲「太寬泛」或「建議使用非現場資源」。 – halfer