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, ApplicationRecordsınıfı alt sınıflara ayırmak ve gitmekte fayda var:
class Product < ApplicationRecordend |
Productbir productstabloya 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. productsTablonun 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: idve 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.newp.name = "Some SmartPhone"puts p.name # "Some SmartPhone" |
new yöntemiyle yeni bir nesne döndürür createnesneyi döndürür ve veritabanına kaydeder.Örneğin, bir model verilmiş Usernitelikleri ile nameve occupation, createyöntem çağrısı oluşturur ve veritabanına yeni bir kayıt ekler:
user = User.create(name: "S.Burak", occupation: "Jr. Developer") |
newYöntemi kullanarak , bir nesne kaydedilmeden somutlaştırılabilir:user = User.newuser.name = "S.Burak"user.occupation = "Jr. Developer"user.save, kaydı veritabanına kaydeder.
Son olarak, eğer her ikisi de createve newbaş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.alluser = User.firstS_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_allsı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_allyöntemini kullanabilirsiniz :User.destroy_by(name: 'S.Burak')User.destroy_all |
app/viewsdizinde, 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 .erbuzantısı varsa, ERB (Gömülü Ruby) ve HTML'nin bir karışımını kullanır. Şablon dosyasının bir .builderuzantısı varsa, Builder::XmlMarkupkitaplı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.erbbir 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 %> |
ApplicationControllerdiğ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 endend |
/clients/newuygulamanıza yeni bir istemci eklemek için girerse , Rails bir örnek oluşturacak ClientsControllerve newyöntemini çağıracaktır . Yukarıdaki örnekteki boş yöntemin gayet iyi çalışacağını unutmayın çünkü new.html.erbeylem aksini söylemediği sürece Rails varsayılan olarak görünümü oluşturacaktır . Yeni bir yöntem oluşturarak Client, newyöntem bir @clientörnek değişkenini görünümde erişilebilir hale getirebilir :def new @client = Client.newend |
ApplicationControllermiras alır ActionController::Base, bu da bir dizi yararlı yöntemi tanımlar.privateveya ile protected) görünürlüğünü azaltmak en iyi uygulamadır .paramscontroller'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 endend |
paramsKarma 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].
paramsNesne 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