كيف أتعامل مع البيانات التي يجب أن تستمر في قاعدة بيانات، ولكنها ليست نموذجًا مناسبًا، في Ruby on Rails؟

StackOverflow https://stackoverflow.com/questions/114192

  •  02-07-2019
  •  | 
  •  

سؤال

تخيل تطبيق ويب مكتوبًا بلغة Ruby on Rails.يتم تمثيل جزء من حالة هذا التطبيق في جزء من البيانات التي لا تتناسب مع وصف النموذج.يجب أن يستمر واصف الحالة هذا في نفس قاعدة البيانات مثل النماذج.حيث يختلف عن النموذج في أنه يجب أن يكون هناك مثيل واحد فقط لفئته وليس له علاقات مع فئات أخرى.

وقد أي شخص يأتي عبر أي شيء مثل هذا؟

هل كانت مفيدة؟

المحلول

من وصفك، أعتقد أن المكون الإضافي Rails-settings يجب أن يفعل ما تحتاجه.

من الملف التمهيدي:

"الإعدادات عبارة عن مكون إضافي يجعل إدارة جدول المفتاح العام وأزواج القيمة أمرًا سهلاً.فكر في الأمر وكأنه تجزئة عامة مخزنة في قاعدة بياناتك، والتي تستخدم طرقًا بسيطة مثل ActiveRecord للمعالجة.تتبع أي إعداد عام لا تريد ترميزه بشكل ثابت في تطبيق Rails الخاص بك.يمكنك تخزين أي نوع من الكائنات.سلاسل أو أرقام أو صفائف أو أي كائن."

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

نصائح أخرى

إذا كانت بيانات، وهي موجودة في قاعدة البيانات، فهي جزء من النموذج.

هذه ليست مشكلة RoR حقًا؛إنها مشكلة تصميم OO عامة.

لو كنت أنا، لربما وجدت طريقة لتصور البيانات كنموذج ومن ثم جعلها فردية باستخدام طريقة المصنع ومنشئ خاص.

وبدلاً من ذلك، يمكنك التفكير في هذا كشكل من أشكال التسجيل.في هذه الحالة، سيكون لديك فقط فئة Logger (مفردة أيضًا) تقرأ/تكتب قاعدة البيانات مباشرةً ويتم استدعاؤها في بداية ونهاية كل طلب.

في Rails، إذا كانت البيانات موجودة في قاعدة البيانات، فهي موجودة في نموذج.في هذه الحالة، قد يُسمى النموذج "Configuration"، لكنه لا يزال مرتبطًا بفئة ActiveRecord في نظام Rails الخاص بك.

إذا كانت هذه البيانات ثابتة بالفعل، فقد لا تحتاج إلى قاعدة البيانات على الإطلاق.يمكنك استخدام (كمثال) متغيرًا في وحدة التحكم في التطبيق الخاص بك:

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

هناك عدد من الأساليب التي يمكن استخدامها لإنشاء مثيل للبيانات لاستخدامها في تطبيق Rails.

لست متأكدًا من أنني أفهم سبب قولك إنه لا يتناسب مع نموذج Rails.

إذا كانت مجرد بنية بيانات معقدة، فما عليك سوى حفظ مجموعة من أكواد روبي في حقل نصي في قاعدة البيانات :-)

على سبيل المثال، إذا كان لديك تجزئة معقدة ومتداخلة تريد حفظها، فقم بتعيين ما يلي لحقل النص "البيانات":

ComplexThing.data = complex_hash.inspect

عندما تريد قراءتها مرة أخرى، ببساطة

complex_hash = eval ComplexThing.data

اسمحوا لي أن أشير إلى شيئين آخرين حول هذا الحل:

  • إذا كانت بنية البيانات الخاصة بك ليست من فئات روبي القياسية، فقد لا يؤدي الفحص البسيط إلى ذلك.إذا رأيت #<MyClass:0x4066e3c> في أي مكان، فهذا يعني أنه لا يتم إجراء تسلسل لشيء ما بشكل صحيح.
  • هذا تنفيذ ساذج.قد ترغب في التحقق من حلول التنظيم الحقيقية إذا كنت تخاطر بالحصول على بيانات Unicode أو إذا كنت تقوم بالفعل بحفظ الكثير من الفئات المخصصة.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top