Cuma, Eylül 09, 2005

Ruby On Rails İle Uygulama Geliştirme " Bölüm 1 "

Artık iyiden iyiye rails'a merak saldım. Artık bu sayfada zaman buldukça döküman yazıp eklemeye çalışacağım.

RUBY ON RAILS ILE YAZILIM GELISTIRMEYE BAŞLANGIÇ


Öncelikle yeni bir rails dosyasına başlanılır. Programı nerede oluşturacaksak o klasörde
rails ProgramAdi

şeklinde yeni bir program oluşturulur. Bu şekilde belli dosyalar oluşmuş olacaktır.


Rails programları şu üç türden oluşmaktadır.
MVC -> MODEL VIEW CONTROLLER

MODEL -> Veritabanı ilişkiler
VIEW -> Sayfanın görünümsel dosyaları
CONTROLLER -> Veritabanı ve görünüm arasındaki ilişki


Yeni bir conntrollerin ( bundan sonra denetleyici olarak geçecek ) ve modelin ( bundan sonra şablon olarak geçecek ) oluşturulması gerekir. View ise ( bundan sonra görünüm olarak geçecek ) bir denetleyiciye ait görünüm dosyasıdır. Uzantıları "rhtml" biçimindedir. Örneğin http://adresiniz/deneme adresi için tasarınızın dizinindeki view dizininde "deneme.rhtml" oluşturursanız ve denetleyiciye "deneme" biçiminde bir istek alımcısı belirtseniz rails bunu sizin yerinize koyacaktır.

Yeni bir denetleyici ve model oluşumu
Aslında bir denetleyici ve model oluşturmak için gerekli dosyaları oluşturmak yeterlidir. Fakat bunu sizin yerinize rails yapabilir. Tasarınızın bulunduğu klasöre giderek
kullanım: ruby script/generate TUR isim
şablon (model): rubu script/generate model Isim
denetleyici (controller): ruby script/generate controller isim

Not: şablon isimleri ilk harfi büyük şekilde başlamalıdır.
[DOĞRU] Murat Isim
[YANLIŞ] MURAT isim murat

Not 2: Şablon isminin veritabanındaki tablo ile ilgili isme sahip olması yararlıdır. Zira karıştırma olasılığı azalır.


Denetleyici neyi denetleyecek, neye bağlı kalacak?

Denetleyici (controller) sayfadan gelen kullanıcı isteklerini kontrol eder, bunları şablona (modele) iletir. Gelen verileri ayarlar, işlemlerini yapar. Bunları görüntüsel hale çevirmek "görünüm"ün işidir. Rails ile bir veritabanı kullanan yazılım geliştirmek bu mantığa dayanır. Veritabanını ayarlar, Tabloyu belirt (not: rails şu anda 6 kadar veritabanı desteklemektedir.), Verileri süz, gelen isteğe cevap ver, bunları kullanıcın görebileceği görüntüsel hale çevir.

İçerik Sistemi

Bir programlama dili öğrenirken izlediğim yol her zaman dilin belli kurallarını öğrendikten sonra hemen örnek kodları incelemektir. O dil ile yapılmış ufağından başlayarak büyüğüne doğru yazılımları inceleyerek bir fikir sahibi olurum zaten onları incelerken hangi fonksiyonun ne iş yaptığı meydana çıkar. Bunun için bizde rails üzerinden bir içerik sistemi geliştirelim. Belki tam bir içerik sistemi olmasa bile en azından günlük notlar alabileceğiniz bir "blog" sistemi. Bunun için yeni bir yazılıma başlayacağımızı railse bildirelim ki o da bizim için gerekli olan dosyaları oluştursun. Tasarıyı oluşturacağımız klasöre gidip
rails icerik

komutunu veriyoruz.

bizim için components , db, lib, public, test, app, config, doc, log, script, vendor klasörlerini oluşturdu. Kısaca;
public -> sayfamızdaki resimlerin, css dosyalarının ve diğer tüm dosyaların (yazılımdan başka) bulunduğu dizindir.
config -> programın veritabansal ayarının yapıldığı dosyaların bulunduğu dizin.
script -> railsin çalışması için gerekli olan ruby dosyaları.
app -> tüm yazılımızı geliştireceğimiz yer.

şimdi railsin çalışıp çalışmadığını kontrol edelim. oluşturduğumuz klasörde
ruby script/server
komutunu çalıştırarak WEBRick sunucusunu çalıştırıyoruz. (Rails dosyaları bir çok sunucuda çalışabilir. Örnek ayarlar ilerleyen bölümlerde yer alacaktır.) Kısaca webrick sunucusu bizim kodları test edebilmemiz için 3000. portta yer alır. Ruby ile oluşturulmuştur. Şimdi http://localhost:3000/ yazarak sunucumuza bağlanabiliriz. İçerik sistemine bağlanmak için http://localhost:3000/icerik/ adresini deneyebiliriz. Adrese girdiğimiz zaman bize hata verecektir. Çünkü henüz içerik için herhangi bir şablon ve denetleyici belirtmedik. Fakat öncelikle içerik sisteminin olduğu veritabanını oluşturup bunu railse bildirmemiz gerekiyor. Bu sistem için ben mysql kullanacağım. (Not: Veritabanı değişimi için tek yapmanız gereken bunu railse bildirmenizdir.) Örneğin "icerik" veritabanında "icerikler" adlı tablo oluşturdum.

CREATE DATABASE 'icerik';

CREATE TABLE `icerikler` (
`id` int(11) NOT NULL auto_increment,
`icerik_basligi` varchar(200) NOT NULL default '',
`icerik` longtext NOT NULL,
`yazilma_tarihi` datetime NOT NULL default '0000-00-00 00:00:00',
`icerik_kategorisi` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1
;

Şimdi rails programında veritabanı ayarlarını yapabiliriz. "config" klasöründeki "database.yml" dosyasına bunu belirtelim. ( NOT: YML Dosya biçimi yanl dilinde yazılmıştır. www.yaml.org )

development:
adapter: mysql # VERITABANI TÜRÜ
database: icerik # VERITABANI
host: localhost # SUNUCU ADRESI
username: root # KULLANICI ADI
password: # KULLANICIYA AIT SIFRE



Veritabanı ayarlarını yaptık artık bu veritabanındaki tabloyu işlemek üzere bir şablonumuz ve bu ilişkiyi ayarlayan bir denetleyicimiz lazım. (View en son sayfa görünümü için gerekli olacağından yeri geldiğince ayarlanacaktır.)

Öncelikle bir şablon oluşturmamız gerekiyor. Şablonun ilk harfi mutlaka büyük harf ile başlamalıdır. Kullanılabilirlik açısından tablo ile ilgili bir isim olması faydalıdır. Biz tablomuza icerik adını koyduğumuza göre şablon adımızı icerik olarak koyabiliriz. Tekrar tasarımızın olduğunu klasöre gidiyoruz ve railse bize bir şablon oluşturmasını söylüyoruz.

ruby script/generate model Icerik


Yapılan iş railsin kodlarından bize gerekli olan klasör ve dosyaları oluşturtturmak. Rails ruby üzerine kurulu olduğu için ruby ye script klasöründeki generate dosyasına erişip bize icerik adında model oluştur diyoruz. Oda bize gerekli klasör ve dosyaları oluşturuyor. Şimdi bu model ile kullanılmak üzere birde denetleyici oluşturalım. Denetleyici isimleri küçük harf ile başlamalıdır. Denetleyici hangi şablonu daha çok kullanacak ise karıştırmamak amacıyla şablon ile aynı ismi vermek mantıklıdır.

ruby script/generate controller icerik


Aynı şekilde oda bizim için gerekli dosyaları oluşturdu. Şimdi denetleyicinin hangi modele ait olduğunu belirtelim. Denetleyicilerin bulunduğu yere giderek (tasarı klasörü/app/controllers) oluşturduğumuz denetleyici dosyasını açalım. (ISIM.rb şeklinde) biz icerik olarak oluşturduğumuz için " icerik.rb " dosyasını açıyoruz. Class yapısınıdan sonra
model :icerik

şeklinde bunun "icerik" şablonuna ait olduğunu belirtiyoruz. burada şablonumuzun adı her zaman küçük harfle yazılmalıdır. Şimdi sayfamıza baktığımız zaman (http://localhost:3000/icerik) bilinmeyen eylem hatası aldığımızı görüyoruz. demek oluyor ki şimdilik sorunsuz gidiyoruz. Hata aldık nasıl sorunsuz gidiyoruz derseniz railsde bir sorun yok çünkü biz denetleyicimize ana sayfada ne yapması gerektiğini söylemedik. Ana sayfada (index genel tabirdir.) n'apması gerektiğini denetleyicimize bildirelim. Aynı dosyada;

def index
render_text("Icerik Sisteminden Merhabalar!")
end


yazalım. Şimdi sayfaya açtığımız icerik sisteminde merhabalar yazısını göreceğiz. Yeni bir sayfa belirtmek isterseniz def ile adını belirtip adrese o adı yazacağınız zaman fonksiyonda belirttiğiniz işlemler yapılacaktır. (Burada index genel tabirdir.)

Evet buraya kadar sorunsuz geldik. Şimdi model dosyamızın hangi tabloyu kullanacağını belirtiyoruz. app/models/icerik.rb dosyasını açıyoruz ve ona "icerikler" tablosunu kullanması gerektiğini söylüyoruz.

set_table_name "icerikler"


şimdi ana sayfa içeriklerden gerekli bilgileri alacak olan kodlarımızı yazalım. öncelikle bunları bir array üzerine alalım ki işlem yapmamız kolaylaşsın. denetleyici listeyi şablon üzerinden alacağı için şablonda tüm listeyi alan bir fonksiyon oluşturalım.

def self.liste
find_all()
end


evet şimdi modele liste diye fonksiyon geldiği zaman artık biz tüm kayıtları alabileceğiz. find_all sonucu bir array şeklinde geri döner. bunu denetleyici üzerinden alalım. sonuç dizi olarak döndüğü için gelen sonucu bir diziye atayalım. (not: şu anki tüm işlemleri ana sayfada yapıyoruz.)

@icerikler = Icerik.liste


burada @icerikler bundan sonra kullanacağımız dizinin adı, Icerik şeklinde belirtilen kısım şablonun (modelin) adı ki ilk harfi büyük ve liste şablonda belirtilen fonksiyonun adı. Şimdi biz içerik listesini @icerikler dizisine aldık. Ama bunu kimse göremiyor şu an. MVC sistemininde M ve C kısımlarını yaptık. Verileri aldık, bunları düzenledik şimdi göstermesi kaldı. Şu anda index üzerinde çalıştığımız için index.rhtml adında bir görüntü dosyası oluşturalım. Şu anda icerik modeli üzerinde olduğumuz için bunu app/views/icerik/index.rhtml şeklinde kaydedelim. Peki index.rhtml. Kayıtları göstermek için bir başka fonksiyon belirtir isek hem bundan sonraki işlerde sorun olmaz hem tasarımı değiştirmek daha kolay olur. Bunun için öncelikle kayitlari_goster fonksiyonu yapalım. bu fonksiyon kendisine gönderilen dizi üzerinde işlem yapacak. Bu fonksiyon denetleyicinin tamamında kullanılacağı için rails tarafından bize yardım amaçlı (:) oluşturulmuş dosya üzerine koyalım ki tüm denetleyici tarafından kullanılsın. app/helpers/icerik_helper.rb dosyasını açalım ve aşağıdaki kodları ekleyelim.


def kayitlari_goster(lste)
yazi = ""
lste.each do |@kayit|
yazi << @kayit.icerik_basligi end return yazi end


yapılan işlem şu şekilde. kayitlari_goster adında bir fonksiyon belirtiyoruz. Buna bir dizi gönderiliyor. ve o dizinin her elemanını ayırarak ve gerekli görünümü yaparak geri gönderiyor. her ayrılan değerden noktadan sonra tablodaki alanı yazarak o alana ait bilgiyi alabiliriz. tüm değerleri ve şekli şemali "yazi" değişkenine atıyoruz ve en son o değeri fonksiyondan çeviriyoruz. Şimdi sıra index.rhtml dosyasını düzenlemeye geldi. Artık burası tasarım bölümü ve biraz da sizin yapımcılığınıza kalmış :) Ben örnek olarak şöyle bir sayfa oluşturdum:


<html>
<head>
<title>Icerik Sistemi</title>


<body>
<h1>Icerik Listesi</h1gt;
<%= kayitlari_goster(@icerikler) %>
</body>


Yeni kayıt ekleme, arama, kategorileme gibi özelliklerin eklenme işlemi vs. tüm diğer işlemler adım adım incelenecek, kodlar oluşturalacak.

6 Comments:

Blogger Nightwalker said...

Öncelikle çalışmanızdan dolayı tebrik etmek isterim. Müsadenizle eklemek istediğim bir nokta var.

Şimdi model dosyamızın hangi tabloyu kullanacağını belirtiyoruz. app/models/icerik.rb dosyasını açıyoruz ve ona "icerikler" tablosunu kullanması gerektiğini söylüyoruz.


set_table_name "icerikler"


Bu noktada Rails ın aslında model ismi ile aynı olan tablo isimlerini otomatik olarak kullandığını belirtmek (kullanım kolaylığını göstermek açısından ) faydalı olabilir. Ancak bu işi yaparken ingilizce dil kurallarını kullanıyor. Konu ile ilgili daha fazla bilgi http://nightwalkers.blogspot.com/2005/12/ruby-ve-trke.html#comments adresinde mevcut.

12:45 ÖÖ  
Anonymous Adsız said...

It's enormous that you are getting thoughts from this piece of writing as well as from our dialogue made at this time.

Stop by my web page - e-cigs

2:06 ÖÖ  
Anonymous Adsız said...

Hi friends, fastidious paragraph and pleasant urging commented at this place, I am
really enjoying by these.

Here is my weblog home porn

1:20 ÖS  
Anonymous Adsız said...

What's up it's me, I am also visiting this website regularly,
this web page is really nice and the users are truly sharing fastidious thoughts.


My blog ... e-cig

5:03 ÖÖ  
Anonymous Adsız said...

I know this site gives quality based articles and other stuff, is there any other website which gives these kinds of information in quality?


Feel free to surf to my web-site; e-cigaret væske

12:43 ÖÖ  
Anonymous Adsız said...

Greetings from Florida! I'm bored to tears at work so I decided to browse your site on my iphone during lunch break. I enjoy the info you present here and can't wait to take a look when I get home.
I'm amazed at how fast your blog loaded on my mobile .. I'm not even using WIFI, just 3G .
. Anyhow, amazing blog!

Stop by my web-site :: e-cigaretter

9:12 ÖÖ  

Yorum Gönder

<< Home

Counters
website counter