5

Tôi đang tìm một số phản hồi về kế hoạch hiện tại của tôi về việc triển khai các trường tùy chỉnh trong đường ray. Tôi mới đến đường ray và phát triển ứng dụng nói chung và sẽ đánh giá cao bất kỳ ý kiến ​​từ các cá nhân có kinh nghiệm hơn.Trường tùy chỉnh trong Rails hoạt động như một mẫu cho các mục nhập trong tương lai

nền

Ứng dụng: Theo dõi nếm thực phẩm và nước giải khát.

Những gì tôi đang cố gắng để mô hình:

  • tài tạo ra một kiểu mẫu mới.
  • Họ gọi: "Wine"
  • Họ quyết định cho công ty của họ, họ muốn theo dõi các thuộc tính sau: Xuất xứ, Loại nho, Công ty, Độ cao, Nhiệt độ và hơn thế nữa.
  • Giả định duy nhất về loại mẫu mà cơ sở dữ liệu của tôi tạo ra là nó có Tên. (ví dụ: cà phê, rượu vang, vv) phần còn lại là tất cả các trường tùy chỉnh do người dùng chỉ định.

Bây giờ, một loại mẫu đã được tạo.

  • Người dùng bắt đầu tạo mẫu các loại rượu mẫu.
  • Họ chọn tạo mẫu, chọn loại Rượu.
  • Các trường mà chúng phải điền vào là các trường mà chúng đã chỉ định trước đó.
  • Trong xứ họ đặt: Pháp, trong loại nho: họ đặt chardonnay, vv ..

-

Kế hoạch của tôi của phương pháp là như sau:

Khi người dùng tạo kiểu mẫu, lưu trữ các trường tùy chỉnh dưới dạng mảng hoặc trong một số định dạng chuỗi và giữ nó dưới một cột được gọi là dữ liệu.

SampleType
tên
rượu

dữ liệu
[origin, grape_type, company, ...]

Khi người dùng muốn tạo ra một mẫu của loại Rượu: Tôi nhìn lên mẫu loại rượu, cho mỗi khóa trong cột dữ liệu, nó tạo ra fo các trường rm. Khi người dùng gửi dữ liệu, tôi tạo một băm của tất cả các tên trường tùy chỉnh và dữ liệu tương ứng của chúng.Tôi serialize nó và lưu nó trong một hash trong một cột dữ liệu như ví dụ:

mẫu
loại
rượu

dữ liệu
{ origin: "France", grape_type: "Pinot Grigio, ... }

Kế hoạch của tôi vào lúc này là sử dụng hstore của PostgreSQL để triển khai băm trong cột dữ liệu.

Câu hỏi của tôi là:

  1. Đây có phải là một giải pháp hợp lệ cho những gì tôi đang cố gắng để làm gì?
  2. Tôi có gặp sự cố khi người dùng thay đổi trường tùy chỉnh nào họ muốn không?
  3. Bất kỳ mối quan ngại nào khác mà tôi nên tính đến?
  4. Mongodb và các db khác có phải là lựa chọn tốt hơn cho loại mô hình này không?

Tôi đã được sử dụng liên kết sau đây để tham khảo: http://schneems.com/post/19298469372/you-got-nosql-in-my-postgres-using-hstore-in-rails http://blog.artlogic.com/2012/09/13/custom-fields-in-rails/

Cũng như nhiều bài đăng tràn ngăn xếp khác, tuy nhiên, dường như không có bài đăng nào theo cách tôi đề cập ở trên.

Mọi nhận xét đều được đánh giá cao.

Trả lời

2

jtgi, đã làm điều gì đó như thế này nhiều lần hơn tôi muốn nhớ, câu trả lời đầu tiên của tôi là "bỏ chạy!" Theo kinh nghiệm của tôi, toàn bộ lĩnh vực do người dùng định nghĩa là một cơn ác mộng, hacky, ác mộng. Chẳng mấy chốc, ai đó sẽ hỏi, "tôi có thể tìm kiếm trên nho không?" hoặc "Tôi muốn có thể nhập nhiều giá trị cho nho". Và cứ tiếp tục, và bạn sẽ ghét bản thân vì đã từng bước xuống con đường này. :-)

Điều đó nói rằng, tôi nghĩ rằng cách tiếp cận của bạn khá tốt. Để trả lời câu hỏi của bạn trực tiếp:

  1. Vâng, đây là phương pháp hợp lệ.

  2. Có, bạn sẽ gặp sự cố khi người dùng thay đổi trường tùy chỉnh mà họ muốn. (xem bên trên)

  3. Xem một số ghi chú bên dưới.

  4. Có thể. Tôi đã đến đó ngay cả trước khi tôi đọc câu hỏi thứ 4 của bạn. Với trường băm => giá trị băm của bạn, bạn đang thực hiện một giải pháp noSQL dù sao đi nữa, nhưng sẽ không quan trọng để thực hiện tra cứu, tìm kiếm, v.v.

Vài suy nghĩ:

  • Tôi nghĩ rằng tôi sẽ sắp xếp dữ liệu vào một cột db, thay vì sử dụng một hàm db. Bằng cách đó, đó là Ruby thuần khiết và không phụ thuộc vào loại db. Xem http://www.ruby-doc.org/core-1.9.3/Marshal.html. Tôi đang làm điều này để cache một số dữ liệu trong một ứng dụng ngay bây giờ, và nó khá trơn. Bạn có thể cần phải sắp xếp (l) dữ liệu bằng cách nào đó, nếu bạn muốn lưu trữ các đối tượng Ruby phức tạp hơn các chuỗi.

  • Có thể bạn sẽ sớm đạt được điều đó, vì vậy tôi sẽ lên kế hoạch lưu trữ một số "siêu dữ liệu" về các thuộc tính trong khi bạn đang ở đó. Ví dụ: "nho" là Chuỗi, độ dài tối đa 20, "xếp hạng" là một số nguyên từ 0 đến 100. Bằng cách đó bạn có thể làm cho biểu mẫu của mình đẹp hơn một chút và thực hiện một số xác thực thô sơ.

  • Khi bạn đến để ghét tính năng này, bạn có thể nhớ tôi. :-)

+0

scrozier, cảm ơn câu trả lời của bạn. Tôi đã lên kế hoạch triển khai các phân tích cơ bản, tìm kiếm, phân loại trên các trường này, mặc dù bây giờ tôi đang mệt mỏi hơn về việc triển khai. Không có mô hình nào để thực hiện điều này tốt, có vẻ như là nếu CMS phải đối phó với loại vấn đề này mọi lúc. Tôi sẽ để câu hỏi mở lâu hơn một chút cho đến khi chấp nhận câu trả lời. – jtgi

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