Rails Active Record Basit

Active Record Rails’te MVC deki M harfidir. Yani model.

Active Record bir ORM’dir. Yani veritabanındaki her bir tablo bir sınıfa karşılık gelmektedir.

Active Record İsim Dönüşümleri

Model / SınıfTablo / Şema
Articlearticles
LineItemline_items
Deerdeers
Mousemice
Personpeople

Primary key ler: Varsayılan “id” kolonu ile tanımlanır. (bigint for PostgreSQL and MySQL, integer for SQLite)

Foreign keys: Varsaayılan olarak table_name_id yani “order_id” gibi tanımlanır.

Active Record Modeli Oluşturma

ApplicationRecord sınıfından kalıtım alır.

class Product < ApplicationRecord
end

Tablo ismini ve Primary key i değiştirme

class Product < ApplicationRecord
  self.table_name = "my_products"
end

Tablo ismini değiştirdiğinizde test sınıfında aşağıdaki düzenlemenin yapılması gerekir.

class ProductTest < ActiveSupport::TestCase
  set_fixture_class my_products: Product
  fixtures :my_products
  # ...
end
class Product < ApplicationRecord
  self.primary_key = "product_id"
end

CRUD

Yeni Kayıt

user = User.create(name: "David")
user = User.new
user.name = "David"
user.save
user = User.new do |u|
  u.name = "David"
  u.occupation = "Code Artist"
end
user.save

Okuma

# tümünü okuma
users = User.all

# ilk kaydı okuma
user = User.first

# name e göre ilk kaydı okuma
david = User.find_by(name: 'David')

# name e göre tüm kayıtları zamana göre ters sıra ile okuma
users = User.where(name: 'David').order(created_at: :desc)

Güncelleme

user = User.find_by(name: 'David')
user.name = 'Dave'
user.save
user = User.find_by(name: 'David')
user.update(name: 'Dave')

Tüm kayıtları güncelleme

User.update_all "max_login_attempts = 3, must_change_password = 'true'"

Silme

user = User.find_by(name: 'David')
user.destroy
# isme göre olan tüm kayıtları silme
User.destroy_by(name: 'David')

# tüm kayıtları silme
User.destroy_all

Doğrulama

name i boş geçilemez yapma

class User < ApplicationRecord
  validates :name, presence: true
end

Kaynak

https://guides.rubyonrails.org/active_record_basics.html


Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site reCAPTCHA ve Google tarafından korunmaktadır Gizlilik Politikası ve Kullanım Şartları uygula.

The reCAPTCHA verification period has expired. Please reload the page.