netSınav sistemi tasarısı hakkında daha ayrıntılı bilgiyi buradan bulabilirsiniz.
Bölüm İçin Yol Haritası:
- Sınav Sisteminin OluÅ?turulması
- Puan Sisteminin OluÅ?turulması
- Helper Kullanımı
- Session Kullanımı
- rescue ve kullanım yerleri
- �zel Fonksiyonların Tanımlanması
3. bölüme ait kaynak kodları buradan yükleyebilirsiniz (.tar.gz)
Detayları ve bölüm yazısını yazının devamında bulabilirsiniz…
Bölüme Dair Genel Açıklama
2. bölümde tamamlanan (Å?u an için gerekli iÅ?lemleri yerine getiren) yönetim ekranında hazırlamıÅ? olduÄ?umuz sınavları 3. bölüm sonunda kullanıcılara not veren ve onları sınav yapan bir sisteme çevireceÄ?iz. Bölümde sistemi oluÅ?turma dıÅ?ında “Helper” dosyalarının kullanılması, “Session”ları (oturumları), “Rescue” kullanımını ve “özel” fonksiyonların nasıl tanımlanabileceÄ?ini göreceÄ?iz.
Bölüm Açıklamaları
�zel Fonksiyon Tanımlanması
Denetleyici (ActionController) içerisinde dıÅ?arıdan eriÅ?ilemeyen fonksiyonlar oluÅ?turmak için “Ruby” dilinde fonksiyonlara yalnızca “sınıf” içerisinden eriÅ?ilebilen “private” fonksiyonlar tanımlamalıyız.
private söz diziminden sonraki her fonksiyon yalnızca sınıf içerisinden eriÅ?ilebilir.
Ruby dilinde bulunan fonksiyonlar 3 çeÅ?ittir. public, protected, private.
Varsayılan olarak her fonksiyon “public” olarak tanımlanmıÅ?tır. (initialize isteseniz de private harici olamaz)
Public fonksiyonlar her Å?ey tarafından çaÄ?rılabilir
“Protected” fonksiyonlar sınıfı ve alt sınıflar tarafından kullanılabilir.
“Private” fonksiyonlar yalnızca sınıf içerisinde (alt sınıflarda kullanılamaz) kullanılabilir. “Private” fonksiyon sınıf dıÅ?ından (sınıfın tanımlanmıÅ? bir nesnesi olsa dahi) çaÄ?rılamaz.
Bu nedenle “ana_sayfa” fonksiyonunu “private” tanımladık ve “netsinav/ana_sayfa” gibi bir giriÅ?i engellemiÅ? olduk.
begin , rescue , end
Ruby dilinde oluÅ?turulan hataları yakalamak için “begin” “rescue” “end” yapısını kullanıyoruz. “begin” söz diziminden sonra sırayla yapılacak iÅ?lemleri yazdıktan sonra “rescue” söz diziminden sonra hata halinde neler yapılması gerektiÄ?ini belirtiyoruz.
Genel kullanım Å?ekli
- # rescue söz diziminden sonra kullanılan ActiveRecord::RecordNotFound
- # ActiveRecord tarafından belirtilen numarada kayıt bulunamaması halinde
- # oluÅ?turulmuÅ? olan hata tipidir (raise RecordNotFound)
- begin
- # normal iÅ?lemler
- rescue ActiveRecord::RecordNotFound
- # kayıt bulunmaması halinde yapılacak olaylar
- end
Oturumlar (Session)
Ruby On Rails oturumlar için Ruby’nin “CGI” modülünündeki “Session” sınıfını kullanır. Oturumlar bir dosya üzerine kayıt edilir ve çaÄ?rıldıÄ?ı zaman kayıtlar bu dosya üzerinden alınır. (Varsayılan olarak oturumlar RAILS_ROOT/tmp/sessions dizinine kayıt edilir.) Dosyasal formata çevrilebilen her nesne (marshalled) oturumlarda kayıt edilebilir. (Büyük nesnelerin bu Å?ekilde kayıt edilmesi hız açısından sizi zorlayabilir. Zira her kiÅ?i için her oturumun ayrı kaydedildiÄ?ini unutmayınız. )
Ruby On Rails bize oturumları veritabanında saklama imkanı da sunmuÅ?tur. Bu yazılıma hız katar. Bunu kullanabilmek için config/enviroment.rb dosyasında “config.action_controller.session_store = :active_record_store” satırını etkin hale getirmeliyiz. Daha sonra RoR’un bizim için gerekli olan tablo yapısını oluÅ?turması için rake db:sessions:create komutunu çalıÅ?tırmalıyız.
Komut sonrası RoR izim için “session_id”, “data” ve “updated_at” alanlarını içeren tablo için gerekli “Migration” dosyasını oluÅ?turur. Veritabansal deÄ?iÅ?ikliklerin ayarlanması için “rake db:migrate” komutunu çalıÅ?tırmak gerektiÄ?ini unutmayalım.
Helper Kullanımı
“Helper” dosyaları “görünüm” için gerekli olan fonksiyonları tutmak için, görünümsel dosyalara ait özellikler katmak için oluÅ?turulmuÅ? “yardımcı” dosyalardır. Her görünüm dosyasından önce o denetleyiciye ait “helper” dosyası uygulamaya eklenir. application_helper.rb dosyası ise tüm denetleyici dosyalarına eklenir. Tüm yazılım tarafından eriÅ?mek istediÄ?iniz bir “görünümsel fonksiyonu” ApplicationHelper.rb dosyasına yalnızca denetleyiciye özel yardımcı fonksiyonları ise “Denetleyici”Helper.rb dosyasına yazabiliriz.
Bunun dıÅ?ında oluÅ?turduÄ?unuz OrnekHelper kütüphanesini denetleyiciye helper :ornek yazarak (dosya adının ornek_helper.rb olduÄ?unu unutmayınız) koyabilirsiniz.
Ã?rneÄ?in form oluÅ?turmak için kullandıÄ?ımız komutlar da aslında birer yardımcı fonksiyonlar kütüphanesidir. (Helper dosyaları) Bunlar RoR tarafından her denetleyiciye otomatik eklenir.
Biterken
Sırasıyla gerekli konuların görülerek incelenmesi Å?eklinde devam edecek olan netSınav sistemi aslında bir yazılımın nasıl oluÅ?tuÄ?unu anlatmanın yanında genel RoR kütüphanelerine bir inceleme de yapmaktadır. Yazılarda olabildiÄ?ince her noktaya deÄ?inilmeye çalıÅ?ılmıÅ?tır. Gerekli kodları incelemek ve deÄ?iÅ?tirmek yararlıdır.
KapanıÅ?
Sonraki bölümlerde kullanıcı giriÅ? ekranlarını (yönetimsel giriÅ? de olmak üzere) ve bu ekran için gerekli olan konulara deÄ?ineceÄ?iz.







Bu bölümle alakalı bir yorum deÄ?il ama sormak istedim. netSınav neden 3. bölümden sonra güncellenmeyi kesti? Gerçekten çok iyi gidiyordunuz. Umarım yeni bölümler hazırlanıyordur.
Tasarı ile ilgili yeni bölümleri hazırlıyordum, dördüncü bölüm hemen hemen uzun bi’ süredir hazır olarak bekliyor (yazıları biraz eksik biçimde). - Gerçekten bir bölüm hazırlamak bile oldukça zahmetli bir iÅ? -
3. bölümün ekran sunumlarını da koymamamın sebebi sadece gelecek isteÄ?i beklemekti. Ã?ünkü “yorumsuz” olan bu tür tasarılar geliÅ?tirici içinde can sıkıcı oluyor, yapma isteÄ?ini azaltıyor.
Fakat, tasarı sona ermedi, inÅ?allah yakın bi’ zamanda bi’ kaç bölüm birden koyacaÄ?ım.
Yeni hazırlanacak bölümler için özel konu belirtimi yapılabilir bu arada.
Yeni konular için netSınav ile alakasız bir Å?ey isteyebilirim. Mesela RoR ile nasıl dosya upload edilebileceÄ?ini, bu dosyaları üyelerle nasıl iliÅ?kilendirilebileceÄ?ini ve üyelerin nasıl bunlara yenilerini ekleyebileceÄ?ini veya deÄ?iÅ?tirebileceÄ?ini anlatan bir Å?ey yazarsanız çok güzel olur. Sanırım netSınav gibi tamamen yeni bir Å?ey istedim. :)
Ã?yeler ile iliÅ?kilendirme hariç gönderim iÅ?lemlerini anlatan bir yazı yazmıÅ?tım zaten. Oradaki “resim uzantılarını” kaldırırsanız herhangi bir uzantı ile gönderim yapabilir.
http://www.ikinoktayazilim.com/wordpress/2007/03/01/ruby-on-rails-ile-dosya-gonderimleri-upload/
İliÅ?kilendirme için ise kullanılan üyelik mekanizması dahilinde veritabanına ekleme alanı olarak “uye_id” tutmanız yeterli olacaktır.
Makalesel olarak daha ayrıntılı yazmaya çalıÅ?acaÄ?ım en kısa zamanda.
Ã?ok teÅ?ekkürler. Ã?ok iÅ?ime yarayacak.
Verilen örneklerle ve yaptığınız anlatımlarla Türkiye de eşsizsiniz şuanda.teşekkürler.
Böyle mahcubiyet duyarım ben, teşekkürler efem ;)