RethinkDB 2.3 - RethinkDB and Rails

रूबी पर रूबी के साथ RethinkDB का उपयोग करना




rethinkdb

रूबी पर रूबी के साथ RethinkDB का उपयोग करना

रूबी ऑन रेल्स के साथ रेथिंकडीबी का उपयोग करना आसान है। यह मार्गदर्शिका रेल और ActiveRecord के साथ कुछ परिचितता मानती है। हम NoBrainer -a RethinkDB ORM का उपयोग कर रहे हैं , जो ActiveRecord के लिए लगभग ड्रॉप-इन प्रतिस्थापन है।

इससे पहले कि आप शुरू करें

शुरू करना

सबसे पहले, NoBrainer का उपयोग करके एक नई रेल एप्लिकेशन तैयार करें:

$ rails new nb_app
$ cd nb_app
$ echo "gem 'nobrainer'" >> Gemfile
$ bundle install
$ rails g nobrainer:install

अब आप व्यक्तिगत रूप से मॉडल तैयार कर सकते हैं या मचान तंत्र का उपयोग कर सकते हैं। उदाहरण के लिए, यहाँ एक अनुच्छेद संसाधन के लिए एक पाड़ है:

$ rails g scaffold Article title:string text:string tags:array

यह app/models/article.rb में निम्नलिखित मॉडल देता है। app/models/article.rb :

class Article
  include NoBrainer::Document
  include NoBrainer::Document::Timestamps

  field :title, :type => String
  field :text, :type => String
  field :tags, :type => Array
end

अब आप ऊपर और RethinkDB और रेल के साथ चल रहे हैं!

गहराई में मॉडल

एक रिलेशनल डेटाबेस के विपरीत, RethinkDB प्रकार लागू नहीं करता है, इसलिए फ़ील्ड पर NoBrainer के प्रकार एनोटेशन सत्यापनकर्ता होते हैं जो डेटाबेस से दस्तावेज़ को सहेजने से पहले चलाए जाते हैं। यदि आप फ़ील्ड के लिए प्रकार निर्दिष्ट नहीं करना चाहते हैं, तो आप डमी प्रकार object उपयोग कर सकते हैं:

$ rails g model User name:string:index user_data:object

यह user_data फ़ील्ड को किसी भी कानूनी JSON मान को सम्‍मिलित करने की अनुमति देता है, जबकि name अभी भी एक वैध स्ट्रिंग होना चाहिए।

class User
  include NoBrainer::Document
  include NoBrainer::Document::Timestamps

  field :name, :type => String, :index => true
  field :custom_data
end

NoBrainer जनरेटर में स्वचालित रूप से TimeStamps मिक्सिन शामिल है जो फ़ील्ड created_on और updated_on । आप यह भी देखेंगे कि यह name क्षेत्र पर एक साधारण माध्यमिक सूचकांक बनाया गया है। डेटाबेस में इंडेक्स जोड़ने के लिए, आप रेक कार्य का उपयोग कर सकते हैं:

$ rake nobrainer:sync_schema

संघों

आप जनरेटर में मॉडल के बीच संघों को निर्दिष्ट कर सकते हैं:

$ rails g model Comment body:string liked:boolean \
    user:belongs_to article:belongs_to

यह टिप्पणियों के लिए निम्नलिखित मॉडल बनाएगा:

class Comment
  include NoBrainer::Document
  include NoBrainer::Document::Timestamps

  field :body, :type => String
  field :liked, :type => Boolean
  belongs_to :user
  belongs_to :article
end

यदि हम Article मॉडल में वापस जाते हैं और एसोसिएशन के has_many पक्ष को जोड़ते हैं, तो यह नोट करना महत्वपूर्ण है कि No_rainer में has_many एसोसिएशन केवल-पढ़ने के लिए हैं। सर्वर लेनदेन का समर्थन नहीं करता है, इसलिए एसोसिएशन के सदस्यों को सहेजना डेवलपर पर निर्भर है।

मान्यकरण

हम खेतों पर अधिक गहराई से सत्यापन को भी निर्दिष्ट कर सकते हैं। हम कुछ तरीकों से Article मॉडल को संशोधित कर सकते हैं ताकि यह सुनिश्चित हो सके कि डेटा में वे गुण हैं जिनकी हम अपेक्षा करते हैं:

class Article
  include NoBrainer::Document
  include NoBrainer::Document::Timestamps

  has_many :comments # read only!

  field :title, :type => String
  field :text,  :type => String, :required => true
  field :tags,  :type => Array, :default => []

  validates :title, :length => { minimum: 5 }
end

NoBrainer केवल सहेजते समय मान्यताओं को चलाता है, लेकिन दस्तावेज़ को पुनर्प्राप्त करते समय नहीं। इसका मतलब है कि आप अपना डेटा हमेशा प्राप्त कर सकते हैं, लेकिन एक अमान्य मॉडल डेटाबेस में सहेजा नहीं जाएगा।

अधिक जानकारी के लिए NoBrainer में सत्यापन के बारे में पढ़ें।

विचारों में निहित संसाधन

चूंकि NoBrainer के has_many संघों को केवल पढ़ा जाता है, इसलिए नेस्टेड संसाधनों को संभालने से थोड़ा बदलाव होता है। उदाहरण के लिए, यदि Comments Articles में Articles , तो लेख दृश्य में टिप्पणी फ़ॉर्म इस तरह दिखाई देगा:

<%= form_for([@article, Comment.new(:article => @article)]) do |f| %>
  <b>Make a comment:</b><br>
  <%= f.label "I liked this article" %> <%= f.check_box :liked %><br>
  <%= f.text_area :body %>
  <%= f.submit %>
<% end %>

यह सिर्फ एक नई Comment बनाता है और इसे वर्तमान Article साथ Article , बजाय build विधि का उपयोग करने के।

पता कर रहा है

NoBrainer ReQL क्वेरीज़ के आसपास एक लाइट रैपर जोड़ता है। यहाँ कुछ उदाहरण हैं:

# Find a specific document by its primary key
Article.find "2FrYybOfzezVpT"

# Find a comment from a user with 'bob' in its name sorted by the name.
# Note: NoBrainer will use the :name index from User by default
User.where(:name => /bob/).order_by(:name => :desc).to_a

# Get two random comments that did not like the article
Comment.where(:liked => false).sample(2)

NoBrainer की क्वेरी भाषा और उसकी क्षमताओं का बहुत व्यापक प्रलेखन है। NoBrainer की भाषा ReQL के शीर्ष पर बनाई गई है, इसलिए यदि आप जानते हैं कि ReQL में कुछ कैसे किया जाए, तो इसका अनुवाद करना सीधा होना चाहिए।

और बस!

आप रूबी ऑन रेल्स और रेथिंकबीडी के साथ अपने रास्ते पर हैं! अधिक जानकारी के लिए अतिरिक्त संसाधनों की जांच करना सुनिश्चित करें।