in_place_editor_field & Türkçe 05/03/07
Scriptaculous altyapısında bulunan “in place editor” alan düzenleme yapısı normal Å?artlar altında İngilizce mesajlar ile geliyor.
Ruby On Rails altyapısında bu özelliÄ?i kullanan yardımcı (helper) fonksiyonu (”in_place_editor_field”) otomatik TürkçeleÅ?tiren fonksiyon aÅ?aÄ?ıda yer alıyor. (EÄ?er bu fonksiyonu kullanmadan TürkçeleÅ?tirme yapmak isterseniz controls.js dosyası 476. satırdan itibaren kodlara göz atabilirsiniz)
Ã?ncelikle “in_place_editor nedir?” konusuna deÄ?inirsek

ApplicationHelper.rb dosyasına kaydedersiniz tüm görünüm dosyalarında sorunsuzca kullanabilirsiniz.
Sayfalama yaparken “önceki sayfa” “sonraki sayfa” baÄ?lantılarında yalnızca deÄ?iÅ?en kısım kayıtların listesinin bulunduÄ?u kısımdır. Madem Ajax diye bir olay var, bence kullanımının olacaÄ?ı en güzel yerlerden birisi de sayfalama olaylarıdır.
Yazıda hem Ajax’ın Rails içerisinde nasıl bir kullanımı olabileceÄ?ine deÄ?inecek, hem de sayfalama sistemini inceleyeceÄ?iz. Ayrıca yazıda “render” fonksiyonunu ve “layout” içeriÄ?ini yansıtmadan yalnızca dosya içeriÄ?ini yansıtmayı saÄ?layan “render :partial” olayını göreceÄ?iz.
Ajaxsal Sayfalama Mekanizması
Ruby On Rails, müthiÅ? iki JavaScript kütüphanesi olan Scriptaculous Ve Prototype ile beraber gelmektedir. Ajaxsal yordamları & efektleri bu iki kütüphane sayesinde Rails’in bize sunmuÅ? olduÄ?u fonksiyonlar ile oldukça hızlı Å?ekilde gerçekleÅ?tirebiliriz. “Pagination” sınıfının ne olduÄ?una ve örnek kullanımına bi’ kaç bildiri öncesinde yer vermiÅ?tim.
BaÅ?ka neler göreceÄ?iz?
Ayrıca yazıda “render” fonksiyonunu ve “layout” içeriÄ?ini yansıtmadan yalnızca dosya içeriÄ?ini yansıtmayı saÄ?layan “render :partial” olayını göreceÄ?iz.
Yazının devamında makalenin tamamını bulabilirsiniz.
Bazen öyle zaman olur ki bir deÄ?ere eriÅ?mek için diÄ?er bir tablonun o alandaki kaydını kullanırız (join).
“Join”i Å?öyle anlatayım, bize gerekli olan alanın deÄ?erini tuttuÄ?umuzu (foreign key) düÅ?ünelim, fakat bizim o deÄ?erinde (tablonun) alanlarına eriÅ?memiz lazım geldiÄ?ini varsayalım.
Bir örnek vermek gerekirse;
a tablosunda b tablosunda bulunan “id” deÄ?erini tuttuÄ?umuzu düÅ?ünelim. Aynı zamanda “b” tablosunda da “c” tablosunda bulunan kayıtların “id” deÄ?erinin tutulduÄ?unu düÅ?ünelim.
a.b_id
b.c_id
İÅ?te bu noktada, a tablosundan “c” tablosunda bulunan alanlara direkt eriÅ?im saÄ?lamak için “through” kullanıyoruz.
Yukarıdaki örnekte verilen a tablosundan “c” tablosunun alanlarına “direkt” eriÅ?im saÄ?lamak için aÅ?aÄ?ıdaki kodları kullanabiliriz.
through olmadan nasıl yapıyorduk?
:through kullanmadan öncelikle “b” tablosunu seçiyor daha sonra “c” tablosuna alanlarına eriÅ?ebiliyorduk.
# model b: belongs_to :c
# c tablosundaki isim alanına eriÅ?mek için
a.b.c.alan
# ----------
# model a: has_many :c, :through :b
# c tablosundaki isim alanına eriÅ?mek için
a.c.alan
Sayfalama (Pagination) İpucu 03/03/07
Ruby On Rails’in tabloları ve sonuçları otomatik sayfalandıran Pagination nesnesi birçok zahmetten bizleri kurtarıyor. Lakin, modelimize ait bir fonksiyonda dönen kayıtları sayfalandırmak için varsayılan olarak hazır bir yapı bulunmuyor. Mutlaka tüm dönen sonuç bilgilerini “pagination” nesnesinde “paginate” fonksiyonuna göndermek gerekiyor. Dönen kayıtların adeti, ilk ve son kayıt arası fark gibi.
Bizleri bu zahmetten kurtaracak olan ufak bir fonksiyon.
application.rb dosyasına bu fonksiyonu koyarsanız, iÅ?lev tüm yazılım denetleyicileri tarafından eriÅ?ebilir olacaktır.
# application.rb dosyasına konulduÄ?u takdirde tüm denetleyiciler
# tarafından kullanılabilir olacaktır.
# http://snippets.dzone.com/posts/show/389
def paginate_collection(collection, options = {:per_page => 10, :page => 1})
pages = Paginator.new self, collection.size, options[:per_page], options[:page]
first = pages.current.offset
last = [first + options[:per_page], collection.size].min
slice = collection[first...last]
return [pages, slice]
end
Kullanımına dair bir örnek:
M. Ozan Hazer günlüÄ?ünde Ruby’nin dolayısıyla Ruby On Rails’in performansının bu dili kullanıp/kullanmama konusunda ne kadar etkili olacaÄ?ına dair güzel bir yazı yazmıÅ?. (Ã?zerinden on gün geçmesine raÄ?men henüz paylaÅ?abiliyorum.)
Ã?zet olarak “Ã?oÄ?unlukla bir yerden kazanırsanız diÄ?er bir yerden kaybedersiniz”i Ruby On Rails ve diÄ?er altyapılar için ana fikir olarak seçerek “Programlamada da iÅ?ini ne kadar kolaylaÅ?tırırsanız o kadar performans kaybedersiniz” Å?eklinde yazılım konularında kullanmak üzere yazıyor.
Yazıya tamamıyla katıldıÄ?ımı belirtiyor, yazılım geliÅ?tiricinin yazılım yazarken zevk alması gerektiÄ?ini düÅ?ünüyorum.
Ruby On Rails İle Sunucuya Dosya Gönderimleri
GiriÅ?
Ruby On Rails altyapısında sunucuya dosya gönderme iÅ?lemi birkaç aÅ?amada gerçekleÅ?tirilebilir. Yazının sonunda kullanıcılardan resim alan, aldıÄ?ı bu resmi ve ufak boyutlu görüntüsünü (thumbnail) kaydeden ufak bir yazılım geliÅ?tirmiÅ? olacaÄ?ız.
Kullanıcılardan dosya almak için “form”umuzu “multipart” olarak tanımlamalıyız. Bunun için form oluÅ?turma etiketimize “:multipart => true” argümanını yollamak yeterli olacaktır.
Ã?rneÄ?i geliÅ?tirmek için kullanıcıya formu gösteren ekle fonksiyonu, formun gideceÄ?i kayit fonksiyonu ve resimleri ototomatik boyutlandırıp ve gerekli kaydetmeyi gerçekleÅ?tiren “private” Å?eklinde “resim_ekle” fonksiyonu kullanacaÄ?ız. Bunları aynı denetleyici içerisinde oluÅ?turmayı unutmayın - aynı denetleyici dıÅ?ında yapmak isterseniz formun gideceÄ?i noktayı deÄ?iÅ?tirmeniz gerektiÄ?ini unutmayın -
Formumuzun Tanımlanması
Ã?rnekte kullanmak üzere kullanıcıdan yalnızca dosya giriÅ?i yapmasını isteyen bir form tanımlayacaÄ?ız.
Bu ekran denetleyicinin “ekle” fonksiyonunda gözükecektir. Bunun içinde denetleyicide “ekle” isimli fonksiyon oluÅ?turuyoruz.
def ekle
end
# ekle.rhtml adı altında app/views/denetleyici klasörüne kaydediyoruz.
< %= "<h2>#{flash[:notice]}" if flash[:notice] %>
< %= form_tag({:action=>'kayit'}, :multipart => true) %>
< %= file_field_tag 'resim' %>
< %= submit_tag 'Ekle' %>
< %= end_form_tag %>
Yukarıda belirtilen kodlarla kullanıcıya dosya giriÅ?i sunan form sayfası oluÅ?turduk. Form “kayit” sayfasına gidecektir. Kayıt sayfasında gelen bu dosyayı sunucumuza kayıt edeceÄ?iz. Devamını Okumak İstiyorum
ScreenCast: NetSınav (3) 11/02/07
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… Devamını Okumak İstiyorum
Derinlemesine ActiveRecord (2) 24/01/07
Derinlemesine ActiveRecord serisinin ilk bölümünde genel yapı itibariyle sistemin nasıl çalıÅ?tıÄ?ına deÄ?inmiÅ?tik. Bu bölümde ise sistem ile ilgili kullanılabilir bilgilere deÄ?ineceÄ?iz. Seride Ruby On Rails’e yönelmenin dıÅ?ında Ruby uygulamalarımızda da ActiveRecord’u nasıl kullanabilirizin cevabı da aranacaktır.
Makale Yol Haritası
- ActiveRecord Nedir, Ne DeÄ?ildir?
- DoÄ?ru Ayarlamalar Nedir? Nasıl Yapılır?
- Tablo İliÅ?kilendirmeleri
- has_one ile basit Yordamlar
- has_many ile Basit Yordamlar
- belongs_to ile Basit Yordamlar
- has_one mı belongs_to mu?
- KapanıÅ?
Ruby On Rails < Ruby (1) 21/01/07
“Ruby On Rails ile web uygulamaları geliÅ?tirmek için ne kadar Ruby bilinmeli?”
Ruby On Rails, Ruby diliyle yazılmıÅ? uygulama geliÅ?tirme altyapısıdır. Ruby On Rails, Ruby dilini kullanır, her Ruby On Rails uygulaması Ruby diliyle yazılır. RoR uygulamaları geliÅ?tirmek için bilinmesi gerekli olan Ruby kurallarına, söz dizimlerine dair genel bir giriÅ? yapacaÄ?ız. RoR öÄ?renirken mutlaka “api belgeleri”ni okumalı, Ruby’nin diziler, katarlar üzerindeki iÅ?lemlerini kavramalıyız.
Yazıda RoR içinde sıkça kullandıÄ?ımız genel Ruby söz dizimlerine ait bilgilerin ilk kısmı yer alıyor.
Belgeler
Katar, Dizi, Sayısal Sınıflarının Ve Genel Ruby Api Belgelendirmeleri
Ruby-core belgelendirmelerinden üzerinde sıkça iÅ?lem yapılacak sınıfları öÄ?renmek, belgelendirmelerinin el altında bulunması uygulama geliÅ?tirirken oldukça önemlidir.
RoR belgeleri
RoR uygulaması geliÅ?tirirken en sık baÅ?vurulan belgeler Api belgeleridir. “gem_server” gem ile kurulan paketlerin RDoc belgelendirmelerini sunucuya açar, http://localhost:8808 adresinden belgelendirmelere ulaÅ?abiliriz.
Söz Dizimine Dair Genel Bilgiler
Fonksiyon Tanımlanması
Her ActionController üzerinde tanımlanan bir fonksiyon (private fonksiyonlar hariç) bir sayfa ifade etmektedir. Ã?rneÄ?in sayfa/index sayfa denetleyicisindeki “index” fonksiyonunu iÅ?ler. Bir fonksiyon Å?u Å?ekilde tanımlanır:
- def fonksiyon(arguman1, arguman2, .., argumann)
- # fonksiyon içeriÄ?i
- end
- def fonksiyon2
- # argümansız fonksiyon
- end
Fonksiyonların Ã?aÄ?rılması
Ruby dilinde fonksiyonların parametlerini parantez içerisine almadan da kullanabiliriz.
- fonksiyon(deger1, deger2, deger3...)
- # fonksiyonların parametlerini parantez içerisine almadan da kullanabiliriz.
- fonksiyon deger1, deger2, deger3
ScreenCast: NetSınav (2) 19/01/07
netSınav sistemi tasarısı hakkında daha ayrıntılı bilgiyi buradan bulabilirsiniz.
İlk bölüme ait sunum ve makaleye buradan ulaÅ?abilirsiniz.
Bölüm İçin Yol Haritası:
- Sınav Ekleme Kısımlarının Yapılması
- Soru Ekleme Bölümlerinin Yapılması
- “Scaffold” dosyalarının deÄ?iÅ?tirilmesi
- Yönetim Sayfasına Ait Genel Düzenleme
2. bölüme ait kaynak kodları buradan yükleyebilirsiniz (.tar.gz)
Ekran sunumlarını buradan izleyebilirsiniz. (Ekran görüntüleri 800×600 boyut olduÄ?u için buraya konulmamıÅ?tır.)
Detayları ve bölüm yazısını yazının devamında bulabilirsiniz…
Derinlemesine ActiveRecord (1) 16/01/07
“Derinlemesine ActiveRecord” Serisi Hakkında
Seride “Ruby On Rails”in kalbi niteliÄ?inde olan “ActiveRecord” modülüne, barındırdıÄ?ı sınıflara, nasıl çalıÅ?tıÄ?ına, ActiveRecord’un veritabanı tablolarını iliÅ?kilendirmesine detaylı bir bir inceleme yapılacaktır. ActiveRecord tabloları nasıl bulur, nasıl birbirleriyle iliÅ?kilendirir, bizim adımıza neler yapabilir soruları sorulacak bunlara örnekler eÅ?liÄ?inde cevap verilmeye çalıÅ?ılacaktır.
Ayrıca yazının sonunda “çok ufak” bir ActiveRecord kopyasına ulaÅ?acaksınız.
ActiveRecord Sınıfı
ActiveRecord Ruby On Railsde “model”lerimiz için kullandıÄ?ımız sınıfları barındıran “modülün” adıdır. Verilen tabloyu ve tabloya iliÅ?kilendirilmiÅ? diÄ?er tabloları nesnelere çevirerek, tabloyu bir nesne gibi kullanmamızı saÄ?lıyor. (Bu sistem Object-relational mapping olarak geçmektedir.)
ActiveRecord ve Ruby On Rails İçerisindeki Görevi
ActiveRecord Rails’in baÄ?ımlı olduÄ?u paketlerden biridir. ( Aslen Ruby On Rails ActiveRecord gibi olan bir çok modülün birleÅ?mesinden oluÅ?muÅ?tur. Bu sebeple ActiveRecord’u Rails dıÅ?ındaki herhangi bir Ruby yazılımında kullanmak yararınızadır. )
Veritabanındaki tabloları Rails’de nesnesel olarak kullanmak için oluÅ?turduÄ?umuz her “model” aslında ActiveRecord modülündeki “Base” sınıfından türetilen bir altsınıftır. ( class ModelAdi < ActiveRecord::Base ) Bu demek oluyor ki; Rails’in tüm veritabanı ile olan iÅ?lemlerinin yükünü ActiveRecord modülündeki Base sınıfı taÅ?ımaktadır. Veritabanını alıp nesne gibi kullanmamızı ActiveRecord modeline borçluyuz.
Yazının devamında ActiveRecord modeline ait detaylı açıklamaların “ilk” kısmını bulabilirsiniz.
ScreenCast: NetSınav (1) 14/01/07
netSınav sistemi tasarısı hakkında daha ayrıntılı bilgiyi buradan bulabilirsiniz.
Bölüm İçin Yol Haritası:
- Yeni Rails uygulamasına baÅ?lama
- Tabloların oluÅ?turulması (ActiveRecord::Migration sınıfı ile)
- Å?ablonların (model) oluÅ?turulması
- Å?ablonlara ait genel-görünümsel yapı kurulması (scaffold)
- netSınav denetleyicisi-yöneticisi ile örnek listeleme
1. bölüme ait kaynak kodları buradan yükleyebilirsiniz (.tar.gz)
Ekran sunumlarını buradan izleyebilirsiniz. (Ekran görüntüleri 800×600 boyut olduÄ?u için buraya konulmamıÅ?tır.)
Detayları ve bölüm yazısını yazının devamında bulabilirsiniz…
ScreenCast: NetSınav (0) 14/01/07
“Ruby On Rails” ile adım adım netSınav adı altında uygulama geliÅ?tirimine ait görüntü sunumlarını ve dökümanları bölümler halinde oluÅ?turup, yayımlayacaÄ?ım inÅ?allah. Ama öncelikle “netSınav nasıl bir sistem olacak? “, “netSınav nedir?”, “görüntü sunumu nedir?”, “nasıl baÅ?layacaÄ?ız?” sorularına cevap vermek istiyorum.
1. Görüntü Sunumu Nedir?
Görüntü sunumu (screencast) bir nevi iÅ?lemleri yaparken ekranı kaydedip, çoÄ?unlukla neler yapıldıÄ?ının sesli biçimde anlatılmasıdır. - netsınav için ilk bölümde sesli anlatım yer almamaktadır. nedeni ise sunumun zaman olarak yaklaÅ?ık iki katı uzamasıdır - Sanki birebir eÄ?itim görüyormuÅ? gibi.
Görüntü sunumu ile ilgili geniÅ? bilgiyi wikipedia.org üzerinde bulabilirsiniz.
2. netSınav Nedir? Kaç bölüm olacak?
netSınav kod adına sahip uygulamamız sanki bir eÄ?itim alanıymıÅ?çasına çalıÅ?acak, kiÅ?ilerin internet üzerinden sınav olmalarını saÄ?layacak, bunlara dair istatistikler sunacak, sonrasında daha farklı geliÅ?melere açık olabilecek bir sistem.
Ekran sunumlarının kaç bölüm olacaÄ?ı henüz belli deÄ?il. Uygulama sunumlarla beraber geliÅ?tirilecek ve yorumlarla uygulamaya yön verileceÄ?inden önceden kaç bölüm olacaÄ?ını kestirmek zor.
3. Neden netSınav?
Ã?rnek olarak bu tür bir sistem seçtim çünkü içerisinde bir tasarıda bulunması gereken hemen hemen tüm iÅ?lemleri kapsıyor. Kullanıcı sistemi, yönetim sistemi, tablo iliÅ?kilendirmeleri, “form” olayları, istatistikler ve diÄ?erleri.
4. Nasıl BaÅ?layacaÄ?ız
Bu sistemi “ruby on rails” altyapısında hazırlayacaÄ?ımız için öncelikle “ruby on rails”ın bilgisayarınızda kurulu olması gerekli.
Bunun dıÅ?ında uygulamayı geliÅ?tirirken “RadRails” uygulama platformunu kullanacaÄ?ım.
İlerlenilecek her bölüm sunumda neler yapılacaÄ?ını yazılı olarak anlatacak - çok detaylı bilgiler varsa yazıda iletilecek - bu bölüm sunum öncesi okunması gerekli ki sunumda deÄ?inilmeyen detaylar ve “n’apıyoruz?” sorusuna cevap bulunsun.
Bölümler ScreenCast: NetSınav (x) Å?eklinde belirtilecek.
5. Gerekli Dosyaların Elde Edilmesi
RubyOnRails sitesinde altyapının kurulumuna dair bilgileri bulabilirsiniz.
RadRails platformunu buradan yükleyebilirsiniz.
6. Biterken
Ekran sunumlarıyla daha kolay anlatım ve daha hızlı çözüme olanak saÄ?landıÄ?ından ve aynı zamanda daha etkileyici olduÄ?undan bu yola baÅ?vurdum. Sistem yorumlar eÅ?liÄ?inde sunumlarla geliÅ?tirilecektir (belli bir bölümden sonra).
- netSınav kaynak kodu açık bir tasarıdır, kodlarının kullanılması serbesttir.
- her bölüm önceki bölümün devamı niteliÄ?inde olup, önceki bölümün kodları üzerinden devam edilecektir.
- Ekran sunumları yine açık kaynak kodlu bir yazılım olan vnc2swf ile çekilmiÅ?tir.
- İÅ?letim sistemi olarak Pardus kullanılmıÅ?tır.
- Haftada en az bir bölüm olmak üzere yayım yapılacaktır.
Bölümler:
“Ruby On Rails” oluÅ?turulan model isimlerinde otomatik olarak ingilizce kurallarına göre iliÅ?kilendirme yapar. Ã?rneÄ?in; “sample” isimli model için “samples” tablosunu arar. Tabii ki bu Türkçe uygulamalarda bize sorun çıkartacaktır. Ya her model için “set_table ‘tablo’” kullanacaksınız ya da environment.rb dosyasında sanki bunu düzensiz bir ingilizce kelimeymiÅ?çesine belirteceksiniz ( inflect.irregular ‘ders’, ‘dersler’ ) ya da son olarak Ruby On Rails’e Türkçe öÄ?reteceksiniz.
- # Ruby için türkçe model-veritabanı iliÅ?kilendirmesi
- # muarifer, murat.celiker@gmail.com
- Inflector.inflections do |inflect|
- inflect.plural /([eiöü]([^aeıioöuü]+)|[eiöü])$/i, '\1ler'
- inflect.plural /([aıou]([^aeıioöuü]+)|[aıou])$/i, '\1lar'
- inflect.singular /([eiöü]([^aeıioöuü]+)|[eiöü])ler/i, '\1'
- inflect.singular /([aıou]([^aeıioöuü]+)|[aıou])lar/i, '\1'
- end
Ruby On Rails. “ders” isim model oluÅ?turduÄ?umuzda bunu “dersler” tablosuna baÄ?layacaktır.
İÅ?leyiÅ?:
Düzenli ifade kullanarak son karakter aıou ise veya son ünsüz harflerden önceki harf (son hecenin ilk harfi) aıou ise ‘lar’, son karakter eiöü ise veya son ünsüz harflerden önceki harf eiöü ise ‘ler’ çoÄ?ul ekini koymasını söyledik.
Rails.Vim: Vim & Rails 09/01/07
Daha önce vim ile ruby üzerinde daha rahat çalıÅ?abilmek için neler yapılabilir konusunu yazmıÅ?tım.
Rails için ise, kolay proje yönetimi ve sizi konsoldan kurtaran “rails.vim” dosyası mevcut. ( ana sayfası - proje sayfası )
Ã?zelliklerinin görüleceÄ?i ekran sunumuna buradan ulaÅ?abilirsiniz.
Kurulum, kullanım detayları ve ipuçlarını yazının devamında bulabilirsiniz.






