Rails, Ruby programlama dilinde yazılmış bir web uygulaması geliştirme ortamıdır. Başlamak için her geliştiricinin neye ihtiyacı olduğu konusunda varsayımlar yaparak web uygulamalarını programlamayı kolaylaştırmak için tasarlanmıştır. Diğer birçok dil ve ortamdan daha fazlasını gerçekleştirirken daha az kod yazmanıza olanak tanır.
Rails felsefesi iki ana yol gösterici ilkeyi içerir:
Don't Repeat Yourself(Kendinizi Tekrar Etmeyin): DRY, "Her bilgi parçasının bir sistem içinde tek, açık ve yetkili bir temsile sahip olması gerektiğini" belirten bir yazılım geliştirme ilkesidir. Aynı bilgileri defalarca yazmayarak, kodumuz daha sürdürülebilir, daha genişletilebilir ve daha az hatalıdır.
Convention Over Configuration(Konfigürasyon Üzerinden Konvansiyon): Rails, bir web uygulamasında pek çok şeyi yapmanın en iyi yolu hakkında fikirlere sahiptir ve sonsuz konfigürasyon dosyalarıyla önemsiz ayrıntılar belirtmenizi gerektirmek yerine varsayılan olarak bu kurallar kümesini kullanır.
Rails Yapısı
MVC yapısını oluşturan genel modüller şöyledir:
- ActiveRecord (Model) : Aktif Kayıt, iş verilerini ve mantığını temsil etmekten sorumlu sistem katmanı olan MVC'deki M modelidir. Active Record, verileri bir veritabanında kalıcı olarak saklanmasını gerektiren iş nesnelerinin oluşturulmasını ve kullanılmasını kolaylaştırır. Bu, kendisi bir Nesne İlişkisel Haritalama sisteminin bir açıklaması olan Aktif Kayıt modelinin bir uygulamasıdır.
- ActionView (View) : Rails'de, web istekleri Action Controller ve Action View tarafından ele alınır . Tipik olarak, Action Controller, veritabanı ile iletişim kurmak ve gerektiğinde CRUD eylemlerini gerçekleştirmekle ilgilenir. Action View yanıtın derlenmesinden sorumludur. HTML ile karıştırılmış etiketlerde gömülü Ruby kullanılarak yazılır. Şablonların ortak kodla karıştırılmasını önlemek için, bir dizi yardımcı sınıf formlar, tarihler ve dizeler için ortak davranış sağlar. Uygulamanız geliştikçe yeni yardımcılar eklemek de kolaydır.
- ActionController (Controller) : Action Controller, MVC'deki C'dir . Yönlendirici, bir talep için hangi denetleyicinin kullanılacağını belirledikten sonra, isteği anlamaktan ve uygun çıktıyı üretmekten denetleyici sorumludur. Neyse ki Action Controller, temel işlerin çoğunu sizin için yapıyor ve bunu olabildiğince basit hale getirmek için akıllı kuralları kullanıyor. Dolayısıyla bir controller, model ve view arasında bir aracı olarak düşünülebilir. Model verilerini görünüm için kullanılabilir hale getirir, böylece bu verileri kullanıcıya gösterebilir ve kullanıcı verilerini modele kaydeder veya günceller.
Aktif Kayıt modelleri oluşturmak çok kolaydır. Tek yapmanız gereken, ApplicationRecord
sınıfı alt sınıflara ayırmak ve gitmekte fayda var:
class Product < ApplicationRecord end |
Product
bir products
tabloya eşlenen bir model oluşturacaktır . Bunu yaparak, bu tablodaki her satırın sütunlarını modelinizin örneklerinin nitelikleriyle eşleştirme olanağına da sahip olacaksınız. products
Tablonun aşağıdaki gibi bir SQL (veya uzantılarından biri) kullanılarak oluşturulduğunu varsayalım :CREATE TABLE products ( id int (11) NOT NULL auto_increment, name varchar (255), PRIMARY KEY (id) ); |
Yukarıdaki şema, iki sütunlu bir tablo bildirir: id
ve name
. Bu tablonun her satırı, bu iki parametreye sahip belirli bir ürünü temsil eder. Böylece aşağıdaki gibi kod yazabilirsiniz:
p = Product. new p.name = "Some SmartPhone" puts p.name # "Some SmartPhone" |
new
yöntemiyle yeni bir nesne döndürür create
nesneyi döndürür ve veritabanına kaydeder.Örneğin, bir model verilmiş User
nitelikleri ile name
ve occupation
, create
yöntem çağrısı oluşturur ve veritabanına yeni bir kayıt ekler:
user = User.create(name: "S.Burak" , occupation: "Jr. Developer" ) |
new
Yöntemi kullanarak , bir nesne kaydedilmeden somutlaştırılabilir:user = User.
new
user.name =
"S.Burak"
user.occupation =
"Jr. Developer"
user.save
, kaydı veritabanına kaydeder.
Son olarak, eğer her ikisi de create
ve new
başlatma için bu blok için yeni bir nesne verecektir:
user = User. new do |u| u.name = "S.Burak" u.occupation = "Jr. Developer" end |
users = User.all
user = User.first
S_Burak = User.find_by(name:
'S.Burak'
)
users = User.where(name:
'S.Burak'
, occupation:
'Jr. Developer'
).order(created_at:
:desc
)
|
user = User.find_by(name: 'S.Burak' ) user.name = 'Burak' user.save |
user = User.find_by(name: 'S.Burak' ) user.update(name: 'Burak' ) |
update_all
sınıf yöntemini kullanabilirsiniz :User.update_all "max_login_attempts = 3, must_change_password = 'true'" |
user = User.find_by(name: 'S.Burak' ) user.destroy |
destroy_by
veya destroy_all
yöntemini kullanabilirsiniz :User.destroy_by(name: 'S.Burak' ) User.destroy_all |
app/views
dizinde, denetleyiciyle ilişkili görünümleri oluşturan şablon dosyalarını tutan ilişkili bir dizin vardır . Bu dosyalar, her bir denetleyici eyleminden kaynaklanan görünümü görüntülemek için kullanılır.Eylem Görünümü şablonları birkaç şekilde yazılabilir. Şablon dosyasının bir .erb
uzantısı varsa, ERB (Gömülü Ruby) ve HTML'nin bir karışımını kullanır. Şablon dosyasının bir .builder
uzantısı varsa, Builder::XmlMarkup
kitaplık kullanılır.
Rails, birden çok şablon sistemini destekler ve aralarında ayrım yapmak için bir dosya uzantısı kullanır. Örneğin, ERB şablon sistemini kullanan bir HTML dosyası .html.erb
bir dosya uzantısına sahip olacaktır .
ERB : Bir ERB şablonuna Ruby kodu hem <% %>
ve <%= %>
etiketleri kullanılarak dahil edilebilir . <% %>
Etiketler bu şartlar, döngüler, ya da bloklar halinde, hiçbir şey dönmez Ruby kodu çalıştırmak için kullanılır ve <%= %>
çıktıyı istediğinizde etiketleri kullanılır.
< h1 >Tüm Isimler</ h1 > <% @people . each do |person| %> Name: <%= person.name %> < br > <% end %> |
ApplicationController
diğer sınıflardan miras alan ve diğer sınıflar gibi yöntemlere sahip bir Ruby sınıfıdır. Uygulamanız bir istek aldığında, yönlendirme hangi denetleyicinin ve eylemin çalıştırılacağını belirler, ardından Rails bu denetleyicinin bir örneğini oluşturur ve yöntemi eylemle aynı adla çalıştırır.class ClientsController < ApplicationController def new end end |
/clients/new
uygulamanıza yeni bir istemci eklemek için girerse , Rails bir örnek oluşturacak ClientsController
ve new
yöntemini çağıracaktır . Yukarıdaki örnekteki boş yöntemin gayet iyi çalışacağını unutmayın çünkü new.html.erb
eylem aksini söylemediği sürece Rails varsayılan olarak görünümü oluşturacaktır . Yeni bir yöntem oluşturarak Client
, new
yöntem bir @client
örnek değişkenini görünümde erişilebilir hale getirebilir :def new @client = Client. new end |
ApplicationController
miras alır ActionController::Base
, bu da bir dizi yararlı yöntemi tanımlar.private
veya ile protected
) görünürlüğünü azaltmak en iyi uygulamadır .params
controller'inde bulunur:class ClientsController < ApplicationController def index if params[ :status ] == "activated" @clients = Client.activated else @clients = Client.inactivated end end def create @client = Client. new (params[ :client ]) if @client .save redirect_to @client else render "new" end end end |
params
Karma tek boyutlu anahtarlara ve değerlere sınırlı değildir. İç içe diziler ve karmalar içerebilir. Bir değer dizisi göndermek için, anahtar adına boş bir çift köşeli parantez "[]" ekleyin:params[:ids]
Şimdi değeri olacak ["1", "2", "3"]
. Parametre değerlerinin her zaman dizeler olduğunu unutmayın; Rails, türü tahmin etmeye veya atmaya çalışmaz.< form accept-charset = "UTF-8" action = "/clients" method = "post" > < input type = "text" name = "client[name]" value = "Burak" /> < input type = "text" name = "client[phone]" value = "12345" /> < input type = "text" name = "client[address][postcode]" value = "34000" /> < input type = "text" name = "client[address][city]" value = "Istanbul" /> </ form > |
Bu form gönderildiğinde değeri params[:client]
olacaktır { "name" => "Burak", "phone" => "12345", "address" => { "postcode" => "34000", "city" => "Istanbul" } }
. İç içe geçmiş hash'i not edin params[:client][:address]
.
params
Nesne bir Hash gibi davranır, ancak tuşları olarak birbirlerinin yerine semboller ve dizeleri kullanmanızı sağlar.
Yararlandığım Kaynaklar:
https://api.rubyonrails.org/
https://tr.wikipedia.org/wiki/Ruby_on_Rails
Yorumlar
Yorum Gönder