Ruby on Rails
ActiveRecord
खोज…
मैन्युअल रूप से एक मॉडल बनाना
मचान का उपयोग करते समय एक तेज और आसान होता है यदि आप रेल के लिए नए हैं या आप एक नया एप्लिकेशन बना रहे हैं, तो बाद में यह उपयोगी हो सकता है कि इसे अपने स्वयं के साथ करें, मचान से उत्पन्न कोड के माध्यम से इसे पतला करने की आवश्यकता से बचें। (अप्रयुक्त भागों को हटा दें, आदि)।
मॉडल बनाना app/models तहत फ़ाइल बनाने जितना सरल हो सकता है।
ActiveRecord में सबसे सरल मॉडल, एक वर्ग है जो ActiveRecord::Base विस्तार करता है।
class User < ActiveRecord::Base
end
मॉडल फ़ाइलों को app/models/ में संग्रहीत किया जाता है, और फ़ाइल का नाम वर्ग के एकवचन नाम से मेल खाता है:
# user
app/models/user.rb
# SomeModel
app/models/some_model.rb
वर्ग सभी ActiveRecord सुविधाओं को इनहेरिट करेगा: क्वेरी विधियाँ, सत्यापन, कॉलबैक, आदि।
# Searches the User with ID 1
User.find(1)
नोट: सुनिश्चित करें कि संबंधित मॉडल के लिए तालिका मौजूद है। यदि नहीं, तो आप माइग्रेशन बनाकर तालिका बना सकते हैं
आप एक मॉडल उत्पन्न कर सकते हैं और यह टर्मिनल से निम्नलिखित कमांड से माइग्रेशन है
rails g model column_name1:data_type1, column_name2:data_type2, ...
और आदेश का पालन करके मॉडल को विदेशी कुंजी (संबंध) भी सौंप सकते हैं
rails g model column_name:data_type, model_name:references
जनरेटर के माध्यम से एक मॉडल बनाना
रूबी ऑन रेल्स एक model जनरेटर प्रदान करता है जिसका उपयोग आप ActiveRecord मॉडल बनाने के लिए कर सकते हैं। बस rails generate model उपयोग करें और मॉडल नाम प्रदान करें।
$ rails g model user
app/models में मॉडल फ़ाइल के अलावा, जनरेटर भी बनाएगा:
- परीक्षण में
test/models/user_test.rb -
test/fixtures/users.yml - डेटाबेस
db/migrate/XXX_create_users.rbमें माइग्रेशन
आप इसे बनाते समय मॉडल के लिए कुछ फ़ील्ड भी बना सकते हैं।
$ rails g model user email:string sign_in_count:integer birthday:date
यह आपके डेटाबेस में उपयुक्त प्रकार के साथ कॉलम ईमेल, sign_in_count और जन्मदिन बनाएगा।
एक प्रवासन बनाना
मौजूदा तालिकाओं में फ़ील्ड जोड़ें / निकालें
चलाकर माइग्रेशन बनाएं:
rails generate migration AddTitleToCategories title:string
यह एक माइग्रेशन बनाएगा जो किसी title तालिका को एक categories तालिका में जोड़ता है:
class AddTitleToCategories < ActiveRecord::Migration[5.0]
def change
add_column :categories, :title, :string
end
end
इसी तरह, आप किसी कॉलम को हटाने के लिए माइग्रेशन उत्पन्न कर सकते हैं: rails generate migration RemoveTitleFromCategories title:string
यह एक माइग्रेशन बनाएगा जो categories तालिका से एक title कॉलम निकालता है:
class RemoveTitleFromCategories < ActiveRecord::Migration[5.0]
def change
remove_column :categories, :title, :string
end
end
हालांकि, कड़ाई से बोलना, निर्दिष्ट प्रकार ( :string इस मामले में :string ) एक कॉलम को हटाने के लिए आवश्यक नहीं है , यह मददगार है , क्योंकि यह इसे वापस लाने के लिए आवश्यक जानकारी प्रदान करता है।
एक तालिका बनाएं
चलाकर माइग्रेशन बनाएं:
rails g CreateUsers name bio
रेल से एक तालिका बनाने के इरादे पहचानता Create उपसर्ग, प्रवास नाम के बाकी एक मेज नाम के रूप में इस्तेमाल किया जाएगा। दिया गया उदाहरण निम्नलिखित उत्पन्न करता है:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :bio
end
end
end
ध्यान दें कि निर्माण कमांड में कॉलम के प्रकार निर्दिष्ट नहीं किए गए थे और डिफ़ॉल्ट string का उपयोग किया गया था।
ज्वाइन टेबल बनाएं
चलाकर माइग्रेशन बनाएं:
rails g CreateJoinTableParticipation user:references group:references
रेल माइग्रेशन नाम में JoinTable का पता JoinTable जॉइन टेबल बनाने के इरादे का पता लगाती है। नाम के बाद आपके द्वारा दिए गए फ़ील्ड के नामों से सब कुछ निर्धारित होता है।
class CreateJoinTableParticipation < ActiveRecord::Migration
def change
create_join_table :users, :groups do |t|
# t.index [:user_id, :group_id]
# t.index [:group_id, :user_id]
end
end
end
आवश्यक index कथनों को रद्द करें और बाकी को हटा दें।
प्रधानता
ध्यान दें कि उदाहरण माइग्रेशन नाम CreateJoinTableParticipation तालिका निर्माण के लिए नियम से मेल खाता है: इसमें Create prefix है। लेकिन यह एक साधारण create_table उत्पन्न नहीं करता था। इसका कारण यह है कि माइग्रेशन जनरेटर ( स्रोत कोड ) निम्नलिखित सूची के पहले मैच का उपयोग करता है:
(Add|Remove)<ignored>(To|From)<table_name><ignored>JoinTable<ignored>Create<table_name>
कॉलबैक का परिचय
कॉलबैक एक ऐसी विधि है जो किसी वस्तु के जीवनचक्र के विशिष्ट क्षणों में (सृजन से पहले या बाद में, विलोपन, अद्यतन, सत्यापन, बचत या डेटाबेस से लोड करने के लिए) कहा जाता है।
उदाहरण के लिए, मान लें कि आपके पास एक सूची है जो निर्माण के 30 दिनों के भीतर समाप्त हो जाती है।
ऐसा करने का एक तरीका इस प्रकार है:
class Listing < ApplicationRecord
after_create :set_expiry_date
private
def set_expiry_date
expiry_date = Date.today + 30.days
self.update_column(:expires_on, expiry_date)
end
end
कॉलबैक के लिए उपलब्ध सभी विधियाँ निम्नानुसार हैं, उसी क्रम में जिसे वे प्रत्येक वस्तु के संचालन के दौरान कहते हैं:
एक वस्तु बनाना
- before_validation
- after_validation
- before_save
- around_save
- before_create
- around_create
- after_create
- after_save
- after_commit / after_rollback
किसी वस्तु को अद्यतन करना
- before_validation
- after_validation
- before_save
- around_save
- before_update
- around_update
- after_update
- after_save
- after_commit / after_rollback
किसी वस्तु को नष्ट करना
- before_destroy
- around_destroy
- after_destroy
- after_commit / after_rollback
नोट: after_save दोनों बनाने और अद्यतन करने पर चलता है, लेकिन हमेशा अधिक विशिष्ट कॉलबैक के बाद after_create और after_update, मैक्रो कॉल निष्पादित किए जाने के क्रम में कोई फर्क नहीं पड़ता।
माइग्रेशन का उपयोग करके एक ज्वाइन टेबल बनाएं
has_and_belongs_to_many संबंध के लिए विशेष रूप से उपयोगी है, आप मैन्युअल रूप से create_table पद्धति का उपयोग करके एक has_and_belongs_to_many तालिका बना सकते हैं। मान लीजिए कि आपके पास दो मॉडल Tags और Proyects , और आप एक has_and_belongs_to_many संबंध का उपयोग करके उन्हें संबद्ध करना चाहते हैं। आपको दोनों वर्गों के उदाहरणों को मिलाने के लिए एक ज्वाइन टेबल चाहिए।
class CreateProjectsTagsJoinTableMigration < ActiveRecord::Migration
def change
create_table :projects_tags, id: false do |t|
t.integer :project_id
t.integer :tag_id
end
end
end
तालिका के वास्तविक नाम को इस सम्मेलन का पालन करने की आवश्यकता है: मॉडल जो वर्णानुक्रम में दूसरे से पहले होता है उसे पहले जाना चाहिए। P roject पूर्ववर्ती T ags है इसलिए तालिका का नाम प्रोजेक्ट_टैग है।
साथ ही चूंकि इस तालिका का उद्देश्य दो मॉडलों के उदाहरणों के बीच संबंध को जोड़ना है, इसलिए इस तालिका में प्रत्येक रिकॉर्ड की वास्तविक आईडी आवश्यक नहीं है। आप इसे id: false पास करके निर्दिष्ट करते हैं id: false
अंत में, जैसा कि रेल में सम्मेलन होता है, तालिका का नाम व्यक्तिगत मॉडल का यौगिक बहुवचन रूप होना चाहिए, लेकिन तालिका का स्तंभ एकवचन रूप में होना चाहिए।
मैन्युअल रूप से अपने मॉडल का परीक्षण
अपने कमांड लाइन इंटरफ़ेस के माध्यम से अपने सक्रिय रिकॉर्ड मॉडल का परीक्षण करना सरल है। नेविगेट अपने टर्मिनल और प्रकार में ऐप्लिकेशन निर्देशिका से rails console रेल सांत्वना शुरू करने के लिए। यहां से, आप अपने डेटाबेस पर सक्रिय रिकॉर्ड तरीके चला सकते हैं।
उदाहरण के लिए, यदि आपके पास एक उपयोगकर्ता name:string साथ एक डेटाबेस स्कीमा था जिसका name:string स्तंभ और email:string , आप चला सकते हैं:
User.create name: "John", email: "[email protected]"
फिर, उस रिकॉर्ड को दिखाने के लिए, आप दौड़ सकते हैं:
User.find_by email: "[email protected]"
या अगर यह आपका पहला या एकमात्र रिकॉर्ड है, तो आप बस चलाकर पहला रिकॉर्ड प्राप्त कर सकते हैं:
User.first
पंक्ति को अद्यतन करने के लिए एक मॉडल उदाहरण का उपयोग करना
मान लीजिए कि आपके पास एक User मॉडल है
class User < ActiveRecord::Base
end
अब अद्यतन करने के लिए first_name और last_name के साथ एक उपयोगकर्ता के id = 1 , तो आपको निम्न कोड लिख सकते हैं।
user = User.find(1)
user.update(first_name: 'Kashif', last_name: 'Liaqat')
कॉलिंग update एकल लेन-देन में दिए गए गुण अद्यतन करने का प्रयास, लौट जाएगा true है, तो सफल और false नहीं तो।