2010-09-30 37 views
27

Tôi đang tạo ra một người quan sát AuditLog theo dõi trên nhiều mô hình.Rails 3 - Cách tạo đối tượng JSON để lưu trữ trong cơ sở dữ liệu

Tôi muốn người quan sát có một after_create, tạo một đối tượng JSON được lưu trữ trong cột cơ sở dữ liệu. Nó sẽ chứa dữ liệu như {photoid: 123, photoname: "asdasd", creator_id: "asdasd"} v.v.

Trong Rails, làm cách nào để tạo loại đối tượng JSON này và sau đó làm cách nào để chèn nó vào DB cùng với các trường không phải JSON khác?

Cảm ơn

Trả lời

-3

Hãy xem này: http://github.com/laserlemon/vestal_versions

Nếu nó không phải là những gì bạn đang tìm kiếm, nó sẽ ít nhất là cho bạn thấy nó được thực hiện.

+0

Việc kiểm tra chỉ là một ví dụ để làm cho câu hỏi dễ tiêu hóa hơn ... Cảm ơn. – AnApprentice

9

Thứ nhất, chắc chắn kiểm tra ActiveRecord serialize và xem nếu nó làm những gì bạn cần: http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-serialize

Tuy nhiên, nếu bạn cần JSON đặc biệt (serialize sử dụng YAML theo mặc định), sau đó bạn luôn có thể giả mạo nó bằng tay.

Bạn có thể chỉ cần tạo một băm trong Ruby và sau đó gọi to_json trên đó trước khi gán nó cho thuộc tính mô hình của bạn.

data = { 'photoid' => 123, 'photoname' => "asdasd", 'creator_id' => "asdasd" } 
myrecord.stored_data = data.to_json 
myrecord.save 
+0

Cảm ơn, tôi sẽ thử điều này. – AnApprentice

+0

To_json có an toàn không? Tôi đã nhìn thấy một số bài đăng trên Google Tìm kiếm đề cập đến đôi khi nó không thành công? Bất kỳ suy nghĩ về điều đó? – AnApprentice

+0

Có một số nếp nhăn khi bạn đang sử dụng 'to_json' trên đối tượng activerecord (bạn phải sử dụng' as_json' hoặc cái gì đó), nhưng để tuần tự hóa một băm đơn giản thì mã hóa JSON thực sự đơn giản ... không có gì sai . Bạn đã tìm thấy gì với Google? – tfe

57

Phiên bản hiện tại của đường ray hỗ trợ tuần tự hóa json ngoài hộp. Xác định trường của bạn dưới dạng một chuỗi (hoặc văn bản) trong quá trình di chuyển và sau đó:

class Foo < ActiveRecord::Base 
    serialize :field, JSON 
end 

bar = Foo.new 
bar.field = [1,2,3] 
bar.save 
+19

Có thể tốt hơn để xác định nó là văn bản, nếu không giới hạn 255 ký tự có thể gây ra sự cố. – thesmart

+2

Nếu điều này không hoạt động vì lý do nào đó (vẫn nhìn thấy những thứ như '{\" abc \ ": \" 123 \ "}' khi hồ sơ được ghi lại), điều gì có thể xảy ra? – K2xL

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