2014-12-16 14 views
7

Trong Rails, tôi có Active Record Collection sau:Remove Object từ Active Record Mảng

@products = Product.all 

tôi cần phải lặp qua bộ sưu tập này và loại bỏ một số đối tượng từ nó mà không cần loại bỏ chúng ra khỏi cơ sở dữ liệu. Do đó, sử dụng

@products.each do |product| 
    if CONDITION 
     product.delete 
    end 
end 

Sẽ không hoạt động, vì điều này cũng sẽ xóa sản phẩm khỏi cơ sở dữ liệu. Có cách nào để xóa các sản phẩm cụ thể khỏi bộ sưu tập này mà không xóa chúng khỏi cơ sở dữ liệu không?

+2

Hãy bỏ qua điều này, nhưng đây là chống lại bất cứ điều gì ORMs như là dành cho. ActiveRecotrd _is supposed_ đại diện cho các đối tượng trong cơ sở dữ liệu. Tôi khuyên bạn nên suy nghĩ lại toàn bộ cách tiếp cận của bạn - bạn có _really_ có lý do chính đáng để hack như vậy không? –

+0

Có lẽ không, nhưng tôi cũng cần lặp qua một mảng khác và so sánh các đối tượng trong cả hai mảng với nhau. Tôi không chắc chắn làm thế nào tôi sẽ đi về phù hợp mà logic vào một tuyên bố như @products = Product.where () – Arw50452

Trả lời

10

Câu hỏi đầu tiên, nếu bạn không muốn tất cả các hồ sơ, thì tại sao thậm chí trả lại từ DB? Tại sao không sử dụng một mệnh đề where để lọc kết quả:

@products = Product.where(<CONDITIONS>)

Thứ hai, nếu bạn nhấn mạnh vào trả lại tất cả kết quả sau đó lọc, sử dụng một khối .reject:

@products = Product.all.reject { |p| <CONDITION> }

+0

Cảm ơn! Tôi cần phải lồng một vòng qua mảng khác và so sánh từng đối tượng trong mảng đó với từng đối tượng trong mảng này như một phần của điều kiện. Tôi đã không chắc chắn làm thế nào tôi có thể thực hiện điều đó trong vòng @products = Product.where () – Arw50452

+0

@ Arw50452 là mảng so sánh và mảng các giá trị (ví dụ: '[1,2,3,4]') hoặc một mảng băm (tức là '[{giá trị: 1}, {giá trị: 2}, {giá trị: 3}]')? – tagCincy

+0

Mảng so sánh là một mảng bản ghi hoạt động khác – Arw50452

1

Kể từ Active Record Bộ sưu tập là mảng, bạn có thể sử dụng reject!:

@products.reject! do |product| 
    // your_code 
end 

Nếu your_code đánh giá là true thì product bị xóa khỏi bộ sưu tập.

+1

Tôi nhận được 'phương thức không xác định 'từ chối'' khi thử' từ chối' trên Bộ sưu tập Hồ sơ Hoạt động của mình. Cũng cố gắng 'từ chối!' Với cùng một kết quả. – ChaosFreak

+0

@ChaosFreak bạn có thể cho chúng tôi thấy thông báo lỗi hoàn chỉnh không? –

Các vấn đề liên quan