Ruby on Rails'in temellerini anlamak: SQL Veritabanları ve nasıl çalıştıkları

Ruby'yi öğrendikten sonra attığımız ilk adım, web'in ve Ruby on Rails istek-yanıt döngüsünün nasıl çalıştığını anlamaktı.

Şimdi veritabanları ve Ruby on Rails ile nasıl bağlantı kurduklarını öğrenmenin zamanı geldi. Temel olarak, cevap Modeli geçerli: Mden MVC, burada öğrendik.

Rails ile web geliştirmeyi öğrenmeden önce, ilk olarak Ruby hakkında bilgi edinmenizi gerçekten tavsiye ederim .

Hadi başlayalım!

Veritabanı nedir?

Hmmm… Aklıma gelen ilk düşünce, verileri depolayan bir şey.

Ancak bu tanım oldukça belirsizdir! Bir dizi, bir karma, bağlantılı bir liste veya herhangi bir veri yapısı, verileri depolayabilen bir şey olabilir.

Bilgisayarı kapattığınızda, o dizide depolanan tüm veri değerlerini kaybedersiniz (tüm veri yapılarında olduğu gibi). Bu yüzden, benim hepsini saklamak iyi bir fikir değil precious data.

Burada iki sorunu çözmemiz gerekiyor:

  1. Verileri saklayın ve istediğimiz zaman alın.
  2. Verileri organize ve yapılandırılmış bir şekilde depolayın, böylece kolayca elde edebiliriz.

Tüm verileri bir not defterinde saklamalı mıyım? Sadece içindeki tüm bilgileri virgülle ayırın, kaydedin ve tamamlayın txt file. Şimdi onu açabilir ve istediğim tüm verileri alabilirim. Verileri saklayabilir ve istediğimiz zaman elde edebiliriz… sorun çözüldü!

Bu sorunu çözdük ama diğerini kaçırdık. Artık tüm veriler saklanıyor ve onları kaybetmeyeceğiz. Ancak dosyada iyi yapılandırılmamış. Verileri organize ve iyi yapılandırılmış bir biçimde saklamak ve almak için kurala ihtiyacımız var.

Verileri iyi yapılandırılmış bir şekilde nasıl düzenleyebileceğimizi düşünelim.

Tüm verileri tablolar halinde organize etmeye ne dersiniz?

İşte burada: saklayacağımız değerleri içeren tablonun başlığı ( sütun adı: Ad, Soyadı, Adres vb. ). Örneğin, "Mickey" (değer) dizesini saklamak istiyorsak , "Ad" sütununda saklanacaktır .

  • Tablo : Diyelim ki İnsanlar
  • Sütunlar : İsim , Soyisim , Adres , vb
  • Satırlar : Bu durumda, bir satırın örneğin adı " Mickey " ve soyadı " Fare ", adresi "123 Fantezi Yolu " vb. Olan bir kişi olabileceğini söyleyebiliriz .
  • Alanlar : veritabanında depolanan tüm veriler.

Ve şimdi verileri depolamanın iyi yapılandırılmış bir yolu var : Bir Tabloda!

Verileri alma, silme, ekleme ve güncellemeye ne dersiniz?

Verileri işlemek için SQL dilini kullanacağız ( NoSQL dünyasından bahsetmeyeceğim! ). Temel bilgileri alalım.

  1. GET: Kişiler tablosundaki tüm verileri ( kişi ) almak istiyorsak , bu tablodan seçmemiz gerekir.

( *) Sembolü Kişiler tablosundaki tüm sütunları seçeceği anlamına gelir . Tüm sütunları alabilirsek, bu seçim için hangi sütunlara ihtiyacımız olduğunu belirleyebiliriz.

2. SİL: Kişiler tablomuzdaki tüm verileri silmek istiyoruz .

Ancak bir tablodan tüm verileri silmek yaygın değildir. Genellikle silmek için "21 yaşın altındaki tüm kişileri silmek istiyorum" gibi bir koşul kullanırız. Bunu daha sonra bu yazıda öğreneceğiz!

3. EKLE: tabloya veri ekleyeceğiz / saklayacağız.

veya hangi sütunlara veri eklemek istediğimizi belirtebiliriz.

4. GÜNCELLEME: verileri sakladık, ancak güncellemek istiyoruz.

Sorgularımızda koşulları kullanmak

Artık verileri sorgulamak (seçmek, silmek, eklemek, güncellemek) için SQL dilini kullanabiliriz.

  • Peki ya sadece soyadı Kinoshita olan kayıtları silmek istersek ?
  • Veya belirli bir kişiyi adı Leandro ve soyadı Kinoshita ile güncellemek istiyorsak ?
  • Veya kişi tablosundaki tüm verileri seçin ve yaşa göre küçükten büyüğe sıralayın?

Evet, nerede ve tarafından sipariş gibi koşullar ve veya ve ve gibi operatörler kullanıyoruz . Hadi bazı örneklere bakalım:

  • Kişi tablosundan Kinoshita soyadıyla tüm kayıtları silme .
  • Kişi tablosundaki tüm kayıtları, adı Leandro ve soyadı Kinoshita ile güncelleme .
  • Kişi tablosundan tüm kayıtları seçmek, ancak bunları yaşa göre sıralamak (artan sırada → ASC).

Tablolar arasındaki ilişki

Sorguların (koşullu veya koşulsuz) nasıl yürütüleceğini biliyoruz. Tabloların ilişkilerinin nasıl çalıştığını anlayalım.

  • Bire Bir (1–1) : Birinin yalnızca diğerine ait olabileceği iki tablo arasındaki ilişki hakkındadır. Örneğin bir kişinin bir pasaportu vardır ve bu pasaport o kişiye aittir. Yani bu örnekte masa İnsanlar, masa Pasaportları ve 1–1 ilişkimiz var.
  • Birden Çoğa (1-n) : Bir tablodaki bir kaydın diğerinden birçok kayda başvurabildiği iki tablo arasındaki ilişki hakkındadır. Örneğin, bir e-ticaret platformu hayal edin: kullanıcılar, siparişler, ürünler, ödemeler, vb. Bir kullanıcının birçok siparişi olabilir ve her sipariş o belirli kullanıcıya aittir. Dolayısıyla bu örnekte, tablo Kullanıcılar, tablo Siparişleri ve 1-n ilişkimiz var.
  • Çoktan Çoka (nn) : Bir tablodaki bir kaydın diğerinden birçok kayda başvurabildiği iki tablo arasındaki ilişki hakkındadır. Ve başka bir kayıt da birinden birçok kayda başvurabilir. Örneğin , yine e-ticaret platformumuz var: ürünleri kategorilere ayırıyoruz. Bir kategoride birçok ürün bulunur (kategoride Teknoloji, cep telefonu, dizüstü bilgisayar vb. Gibi birçok ürüne sahiptir) ve bir ürün birçok kategoriye ait olabilir (ürün Cep Telefonu, Teknoloji ve Elektronik Kategorisine aittir). Yani bu örnekte, Ürünlerimiz, Kategoriler tablo kategorilerimiz ve bir nn ilişkimiz var.

Ray Modu AÇIK

Artık veritabanlarının anlamını anlıyoruz, bazı temel sorguları denedik ve tablolar arasındaki ilişki hakkında konuştuk. Fakat bu bilgiyi Ruby on Rails ve web geliştirme dünyasında nasıl kullanabiliriz ?

Her şeyden önce: Raylar , Raylardır . Veritabanı olduğu Veritabanı . Açık mı? Ancak insanların bu konuda genellikle kafası karışır.

Bir Kullanıcı modeli bir Kullanıcılar tablosunu temsil edebilir . Ancak model tablo değildir.

  • In veritabanında , elimizdeki tablolar ve satırlar.
  • On raylar , elimizdeki modelleri (sınıflar) ve nesneleri.

Bir blog sitesi hayal edin. Blogun her gönderi için bir yazara ihtiyacı vardır. Bu nedenle , bazı sütunlarla (ad, soyad, vb.) Bir Yazarlar tablosu oluşturuyoruz :

Göç, biz sütunları eklemek first_name, last_name, email, birthday, created_at, ve updated_at. ( created_atve kod updated_attarafından oluşturulur t.timestamps).

Biz göç (Ruby kodu) oluşturmak Yani, çalıştırmak rake db:migrateterminalde komutu ve bir tablo oluşturur Authorsile first_name, last_name, email, birthday, created_at, ve updated_atsütunlar.

Rails'e Geri Dön - bir Authormodel oluşturabiliriz :

Şimdi Authors, bazı sütunların ve bir Authormodelin olduğu bir tablomuz var .

Rails Konsolunu Kullanma

Terminali açın ve yazın bundle exec rails c. Unutmayın, RAILS konsolundayız, yani sınıflarımız, nesnelerimiz, niteliklerimiz vb. Var .

Raylardaki İlişkiler

Bir Authorstablo / model oluşturduk . Şimdi ihtiyacımız olan şey bir Postsmasa / model. Bir yazarın birçok gönderisi vardır ve bir gönderi belirli bir yazara aittir. Buradaki ilişki birden çoğa ( 1-n ). Hatırlamak?

Biz oluştururken Yani Poststablo, biz (sütun yayının yazarı bir başvuru saklamak gerekir AUTHOR_ID içinde Mesajlar masanın). Olarak bilinir Foreign Key.

Ve modelleri nasıl ilişkilendiririz?

yazar has_manygönderileri

gönderi bir yazara aittir

Rails Konsolunu Kullanma

* Hakkında kısa bir açıklama has_manyve belongs_to. Her ikisi codesde ActiveRecordsınıfta tanımlanan yöntemlerdir . Modellerimizi miras alarak oluşturduğumuzu görebilirsiniz ActiveRecord::Base.

Ruby Foundation makalemde, Miras bölümü olan Nesne Yönelimli Programlama hakkında öğrendiğimizi hatırlıyor musunuz? Kullanabileceğimiz nedeni budur has_manyve belongs_tobizim uygulamaya yerde tanımlamadan yöntemleri. Rails bizim için halleder.

Bu kavramı derinlemesine anlamak istiyorsanız, Rails deposunu klonlayın veya 'Çok Sayıda Aktif Kayıt Derneği'nin Perde Arkası'na bakın.

Raylardaki Sorgular

ActiveRecord yöntemlerini kullanarak sorgulayabiliriz:

  • tümü : Belirli bir modelden tüm nesneleri alın.

Perde arkasında, SELECT * FROM postssorguyu yürütmektedir .

  • find : find'ı kullanarak nesneyi id (birincil anahtar) ile alabiliriz.

Perde arkasında SELECT * FROM posts WHERE id = 1sorgu yürütüyor .

  • nerede : Koşulları geçen nesneleri alın.

Perde arkasında SELECT * FROM posts WHERE title = 'Database & Rails'sorgu yürütüyor .

  • sıralama : Tüm nesneleri bir sütuna göre sıralayın.

Perde arkasında SELECT * FROM posts ORDER BY created_at DESCsorgu yürütüyor .

Bu kadar!

Burada çok şey öğrendik. Umarım içeriği takdir edersiniz ve Databases and Rails modellerinin nasıl çalıştığı hakkında daha fazla şey öğrenirsiniz.

Bu, Rails'i ve web geliştirmeyi öğrenme ve bunlara hakim olma yolculuğumda bir adım daha ileri gidiyor. Tüm yolculuğumun dokümantasyonunu burada Renaissance Developer yayınımda görebilirsiniz .

Tam bir Ruby and Rails kursu istiyorsanız, gerçek dünya kodlama becerilerini öğrenin ve projeler oluşturun, One Month Ruby Bootcamp'ı deneyinve Rails Bootcamp . Orada görüşürüz ☺

Eğlenin ve öğrenmeye ve kodlamaya devam edin.

Twitter ve Github'ım. ☺