2017-11-09 36 views
5

Trong cơ sở dữ liệu, tôi có một trường mảng is_deleted với chức năng tuần tự hóa trong mô hình. Tôi muốn nối thêm các giá trị mảng trong trường cơ sở dữ liệu. Đây là hàm được sử dụng trong postgresql.Cách cập nhật giá trị trường mảng với chức năng 'nối thêm'

Message.update_all(['is_deleted = array_append(is_deleted, ?)', 2]) 

Làm thế nào nó có thể được thực hiện với cơ sở dữ liệu sqllite?

Trả lời

1

bạn cần phải serialize cột trong mô hình

Class Message < ActiveRecord::Base 
    serialize :is_deleted, Array 
end 

cho một mặt lưu ý nếu bạn muốn có một cột được sử dụng để lưu trữ mảng sau đó nó nên chuỗi column_type hoặc text

Message.all.each { |m| m.update_attribute(:is_deleted, m.is_deleted.push(2)) } 
+0

tôi có đã thực hiện điều đó trong mô hình.Những gì tôi muốn làm là muốn cập nhật tất cả các bản ghi với truy vấn duy nhất và nối thêm các giá trị mảng mới trong trường với các giá trị hiện có. Giống như ví dụ postgres mà tôi đã cung cấp trong câu hỏi. –

+1

tôi đã thay đổi câu trả lời, vui lòng xem. – Gabbar

+0

Đây là một trong những giải pháp tốt. Nhưng nó có thể nó có thể làm điều đó với một truy vấn duy nhất như trên postgres sql query.becuase tôi có hơn 1000 hồ sơ và nó không khả thi cho 1000 truy vấn. –

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