2008-09-22 13 views
5

Hãy tưởng tượng một ứng dụng web được viết bằng Ruby on Rails. Một phần của trạng thái của ứng dụng đó được thể hiện trong một đoạn dữ liệu không phù hợp với mô tả của một mô hình. Bộ mô tả trạng thái này cần được duy trì trong cùng một cơ sở dữ liệu như các mô hình. Trường hợp nó khác với mô hình là chỉ cần một cá thể của lớp của nó và nó không có mối quan hệ với các lớp khác.Làm cách nào để xử lý dữ liệu phải được lưu giữ trong cơ sở dữ liệu, nhưng không phải là một mô hình phù hợp, trong Ruby on Rails?

Có ai đi qua bất cứ điều gì như thế này không?

Trả lời

3

Từ mô tả của bạn Tôi nghĩ rằng plugin cài đặt đường ray phải làm những gì bạn cần.

Từ Readme:.

"Settings là một plugin mà làm cho việc quản lý một bảng chính toàn cầu, các cặp giá trị dễ dàng suy nghĩ về nó như một Hash toàn cầu lưu trữ trong bạn sở dữ liệu, sử dụng đơn giản ActiveRecord như phương pháp để thao tác Theo dõi bất kỳ cài đặt chung nào mà bạn không muốn mã cứng vào ứng dụng đường ray của mình. Bạn có thể lưu trữ bất kỳ loại đối tượng nào. Chuỗi, số, mảng hoặc bất kỳ đối tượng nào. "

http://github.com/Squeegy/rails-settings/tree/master

3

Nếu đó là dữ liệu và dữ liệu trong cơ sở dữ liệu, đó là một phần của mô hình.

1

Đây không phải là vấn đề thực sự của ROR; đó là một vấn đề thiết kế chung của OO.

Nếu đó là tôi, tôi có thể tìm cách để khái niệm hóa dữ liệu dưới dạng một mô hình và sau đó chỉ cần làm cho nó thành một singleton với một phương pháp nhà máy và một nhà xây dựng tư nhân.

Ngoài ra, bạn có thể coi đây là hình thức ghi nhật ký. Trong trường hợp đó, bạn chỉ cần có một lớp Logger (cũng là một singleton) để đọc/ghi cơ sở dữ liệu trực tiếp và được gọi vào đầu và cuối mỗi yêu cầu.

1

Trong Rails, nếu dữ liệu nằm trong cơ sở dữ liệu, nó nằm trong một mô hình. Trong trường hợp này, mô hình có thể được gọi là "Cấu hình", nhưng nó vẫn được ánh xạ tới một lớp ActiveRecord trong hệ thống Rails của bạn.

Nếu dữ liệu này thực sự tĩnh, bạn có thể không cần cơ sở dữ liệu nào cả. Bạn có thể sử dụng (như là một ví dụ) một biến trong điều khiển ứng dụng của bạn:

class ApplicationController < ActionController::Base 
    helper :all 
    @data = "YOUR DATA HERE" 
end 

Có một số phương pháp có thể được sử dụng để nhanh chóng dữ liệu để sử dụng trong một ứng dụng Rails.

0

Tôi không chắc mình hiểu tại sao bạn nói nó không thể phù hợp với mô hình Rails.

Nếu nó chỉ là một cấu trúc dữ liệu phức tạp, chỉ cần lưu một loạt các mã Ruby trong một lĩnh vực văn bản trong cơ sở dữ liệu :-)

Nếu ví dụ bạn có một băm lồng nhau phức tạp mà bạn muốn lưu, chuyển nhượng sau đến lĩnh vực của bạn 'dữ liệu' text:

ComplexThing.data = complex_hash.inspect 

Khi bạn muốn đọc lại, chỉ cần

complex_hash = eval ComplexThing.data 

Hãy để tôi chỉ ra 2 điều thêm về giải pháp này:

  • Nếu cấu trúc dữ liệu của bạn không phải là các lớp Ruby chuẩn, việc kiểm tra đơn giản có thể không thực hiện được. Nếu bạn thấy # < MyClass: 0x4066e3c > ở bất cứ nơi nào, nội dung nào đó không được sắp xếp đúng cách.
  • Đây là triển khai ngây thơ. Bạn có thể muốn kiểm tra các giải pháp marshalling thực nếu bạn có nguy cơ có dữ liệu unicode hoặc nếu bạn thực sự đang tiết kiệm rất nhiều các lớp tùy chỉnh.
Các vấn đề liên quan