Bu yazının amacı yeni dosyaları bu şekilde oluşturmak yerine controller yaratırken otomatik oluşturmayı göstermek ve link_to komutunu tanıtmak olacak.
Hatırlarsanız scaffold işlemini yaparken komutumuzun başlangıcı script/generate olarak yazılıyordu. (Windows kullanıcıları bunun başına ruby koymak zorunda, yani ruby script/generate şeklinde. Linux kullanıcıları da isterlerse koyabilirler ancak kodu uzatmaktan başka bir faydası yok.) Program geliştiricilerinin ellerinin altında her zaman olması gereken araçlar vardır. Mesela IDE, css editor v.s. İşte rails geliştiricilerinin sık sık kullandığı araçlar arasında script/generate ve rake vardır. Rake'i daha sonra anlatacağız ancak bu yazıda biraz script/generate den bahsedelim.
Script/generate
Diğer Ruby ve Rails komutları gibi ismiyle örtüşen bir işlevi vardır, kendisinden sonra belirtilen işlemin betiğini üretir. 002 numaralı yazıda kullandığımız komutta bu betik scaffold du ancak her zaman scaffold olmak zorunda değil. script/generate ile controller, model gibi ruby yapılarını da üretebiliriz.
Komuttan sonra üretilecek yapının türü, yapının adı ve varsa parametreleri girilir. Örneğin hatırlarsanız 002 numaralı derste verdiğimiz komut
script/generate scaffold Cd baslik:string aciklama:text yer:stringşeklindeydi. Burada scaffold yaratmak istediğimiz yapının türünü, Cd yapının ismini, daha sonra gelen parametler ise yaratılacak veritabanı modelinde kullanacağımız alanları ve alan türlerini gösteriyor.
Controller da benzer şekilde yaratılıyor. Örneğin bu yazıda "ben" isimli bir controller yaratacağız ve bu controller a bağlı "hakkımda" ve "iletişim" isimli iki adet sayfamızın olmasını sağlayacağız. Normalde "ben" isimli bir controller yaratmak için vereceğimiz komut
script/generate controller Benşeklinde olması gerekiyor. Ancak biz bu controller ile birlikte, bu controller'a bağlı olacak sayfaları da yaratmak istediğimizden parametre olarak bu sayfaların isimlerini de aşağıdaki gibi geçirebiliriz.
script/generate controller Ben hakkimda iletisimBu aşamada tarayıcımızın adres satırına "http://localhost:3000/ben/hakkimda" ya da "http://localhost:3000/ben/iletisim" yazarak sonuçları görebilirsiniz. Eğer tarayıcı hata verdiyse webrick server'ın çalışıyor olduğundan emin olun. Çalışmıyorsa "script/server" komutuyla server'ı başlatın.
Dikkat ettiyseniz app/view klasörü altında hakkimda.html.erb ve iletisim.html.rb isimli iki dosya "ben" isimli dizin içerisinde yaratıldı. Ayrıca ben_controller.rb isimli dosyamızda app/controllers dizinine yaratıldı. Burada her iki view içinde birer fonksiyon tanımlı olduğunu görüyoruz. Bu fonksiyonların içerisine bu görünümlerle ilgili programatik herşeyi tanımlayabiliriz. Controller'lardan daha sonra ayrıntılı olarak bahsedeceğim için bu kısmı detaylara inmeden geçiyorum, ancak küçük bir ipucu olması açısından @title ve @zaman isimli iki değişkenin .html.erb dosyalarına nasıl aktarıldığını göstreeceğim. ben_controller.rb dizinini aşağıdaki gibi değiştirelim.
class BenController < ApplicationControllerhakkimda ve iletisim isimli fonksiyonların içindeki "@" karakteriyle başlayan title değişkenine sayfa başlığını, zaman isimli değişkene de "Time.now.to_s" isimli komut yardımıyla o anki zamanı atadık. Bunları ilgili .html.erb dosyaları içerinde < % = ve % > blokları arasında kullanabileceğiz.
def hakkimda
@title="Hakkımda"
@zaman= Time.now.to_s
end
def iletisim
@title="İletişim"
@zaman=Time.now.to_s
end
end
hakkimda.html.erb isimli dosyayı aşağıdaki gibi değiştirelim.
iletisim.html.erb isimli dosyayı da aşağıdaki gibi değiştirelim.<%= @title %>
Hakkmda yazacagim seyler buraya gelecek.
Su an saat: <%= @zaman %>
link_to<%= @title %>
Geçerli zaman: <%= @zaman %>
İletişim Bilgilerim buraya gelecek...
Basitce bir bağlantı yaratmak için kullanılan Rails komutudur. Çeşitli kullanımları mevcuttur. en yaygın olarak kullanım şekilleri aşağıdaki gibidir.
<%= link_to "link text...", :action => "index" %>
<%= link_to "link text...", :action => "edit", :id => @item %>
<%= link_to "link text...", :controller => "items" %>
<%= link_to "link text...", :controller => "items", :action => "index" %>
Ancak biz sayfamızın üst kısmındaki gezinti bölümünde kullanacağımız için link_to komutunun özel bir türevi olan link_to_unless_current komutunu kullanacağız.
<%= link_to_unless_current("Ana Sayfa", { :controller => "cds", :action => "index" }) %>Yukarıdaki komut eğer kullanıcı hali hazırda "cds/index" sayfasında değilde "cds/index" sayfasına bir bağlantı oluşturur, aksi takdirde bağlantı oluşturmadan sadece "Ana Sayfa" yazar. Sanırım geri kalanı yeterince açık.
Bunu layouts klasörü içerisindeki cds.html.erb içinde üst kısımdaki gezinti çubuğunun olduğu yere aşağıdaki gibi uyguluyoruz.
<%= link_to_unless_current("Ana Sayfa", { :controller => "cds", :action => "index" }) %> |Bu işlemden sonra cds.htm.erb dosyasının aynısından bir de ben.html.erb dosyası yaratarak yine layouts dizinine atıyoruz, çünkü yeni yarattığımız controller ve view'lerin de kullanmak için kendi isimlerini aradıkları bir layout dosyasına ihtiyaçları var. Aslında bunu yapmanın daha pratik yolları var, fakat bunlardan ileride bahsedeceğim.
<%= link_to_unless_current("Hakkımda", { :controller => "ben", :action => "hakkimda" }) %> |
<%= link_to_unless_current("İletişim", { :controller => "ben", :action => "iletisim" }) %>
Tüm bunları yaptıktan sonra sitemizde özet olarak;
- script/generate'i anladık,
- Fazladan bir controller ekledik,
- Fazladan iki sayfa ekledik,
- Controller'dan sayfalara değişken geçirdik,
- link_to komutunun ne iş yaptığını anladık,
- link_to_unless_current komutunu kullanarak gezinti çubuğunu işlevselleştirdik
Sürç'ü Lisan ettiysek affola, bir sonraki yazıda görüşmek üzere kalın sağlıcakla...