Eğer projelerinizde in_place_edit kullanıyorsanız, kullandığınız değer sıfırlandığında kullanıcının bunu yeniden değiştirme şansı olmayacaktır. Bu nedenle ufak bir kodla bu soruna çözüm bulabilirsiniz.
Öncelikle bunu uygulayacağımız “model”imizi açıyoruz ve kayıttan önce bu alanı kontrol ediyoruz.
before_save :kontrol
private
def kontrol
self.aciklama = 'Açıklama Yazmak İçin Tıklayın' if self.aciklama.empty?
end
end
Sayfanızda değişkeni göstereceğiniz yerde ise ufak bir ön kontrolden sonra yazdırabilirsiniz.
str == 'Açıklama Yazmak İçin Tıklayın' ? '' : str
end
“Açıklama Yazmak İçin Tıklayın” i sabit olarak tanımlamak tabii ki her daim daha iyidir.
Rss OluÅŸturumu 11/08/07
Controller dosyamız:
def index
@liste = Giris.find(:all, :order => "updated_at, created_at" , :limit => 15, :conditions => 'ozel = false AND aktif = true')
@headers["Content-Type" ] = "application/rss+xml"
end
index.rxml dosyamız
xml.rss "version" => "2.0" , "xmlns:dc" => "http://purl.org/dc/elements/1.1/" do
xml.channel do
xml.title 'SAYFA BAÅžLIÄžI'
xml.link url_for(:only_path => false, :controller => 'gunluk', :action => 'index' )
xml.pubDate CGI.rfc1123_date(@liste.first.updated_at)
xml.description h("AÇIKLAMA" )
@liste.each do |kayit|
xml.item do
xml.title kayit.baslik
xml.link url_for(:only_path => false,
:controller => 'gunluk' ,
:action => 'yazi' ,
:id => kayit.kisa_baslik)
xml.description kayit.kisa_icerik
xml.pubDate CGI.rfc1123_date(kayit.updated_at)
xml.guid url_for(:only_path => false,
:controller => 'gunluk' ,
:action => 'yazi' ,
:id => kayit.kisa_baslik)
xml.author "YAZAN"
end
end
end
end
XmlBuilder sınıfından faydalandık.
# _kayit.rhtml
< %= kayit.isim %>
< %= kayit.blabla %>
aslen ÅŸudur;
<%= kayit.isim %>
< %= kayit.blabla %>
< % end %>
ipucu: request.post? 09/06/07
Bir konu hakkında belge ortaya çıkartmak eğer vaktiniz kısıtlıysa oldukça uzun sürüyor. Bazı konular hakkında belge hazırlamaya çalışıyorum Rails ile ilgili ve vaktim kısıtlı. Onlar ortaya çıkana kadar ipuçları paylaşımı yapalım.
request.post?
if request.post?
# form gönderilmiş
# ona göre işlem yap
else
# form henüz ortada yok.
end
end
Rails için genel Türkçe olayları halleden TurkceRb eklentisini projelerinize kurabilirsiniz.
script/plugin install svn://rubyforge.org/var/svn/turkcerb
İçerik
- Model ve Tablo İlişkilendirmeleri
- created_at yerine kayit_tarihi (created_at kullanılabilir durumda kalır)
- updated_at yerine guncelleme_tarihi (updated_at kullanılabilir durumda kalır)
- distance_of_time_in_word Türkçeleştirmesi
- ActiveRecordHelper Türkçeleştirmesi
- Tarihsel seçimlerin Türkçeleştirilmesi
Eklenti için tasarı sayfası: http://turkcerb.rubyforge.org
Daha önce “Türkçe Alan Adları İçin Tarihsel Kayıtlar ( created_at & updated_at => kayit_tarihi , guncelleme_tarihi )” konusunda bahsettiÄŸim Rails’in otomatik olarak tarih atadığı “created_at|updated_at” ve “updated_at|updated_on” alanlarını Türkçe isim kullanarak deÄŸiÅŸtirmek için daha baÅŸka bi’ yol ise ÅŸu ÅŸekilde;
Not
Bu yolda Tablodaki alanların isimlerinin created_at|created_on, updated_at|updated_on şeklinde olması gerektiğini unutmayınız. Yapılan iş sadece başka isimden bu alanlara erişmek olacaktır.
Amaç
Yazının asıl amacı tablo alanlarını belirli bir standardın dışına nasıl çıkarabilirize cevap vermektir. Railsin otomatik oluÅŸturduÄŸu “attribute” olaylarını el ile yapmayı görmektir.
self[:created_at]
end
def kayit_tarihi(tarih)
self[:created_at] = tarih
end
# read_attribute ile self[:...] aynı işlevi yapar
def guncellenme_tarihi
read_attribute(:updated_at)
end
# self[..] = blabla yazmak için write_attribute kullanılır
def guncellenme_tarihi(tarih)
write_attribute(:updated_at, tarih)
end
Tüm bu alanlara sahip tablolarda bu kodu kullanmanız gerektiğini unutmayınız.
Rails ActiveRecord modülünde kaydın eklenme tarihini ve güncellenme tarihini eğer created_at|created_on ve/veya updated_at|updated_on alanlarınız var ise otomatik olarak bunlara kaydeder.
Ufak Bi’ Not:
Alanlara kaydın otomatik yapılmaması için iki yolumuz mevcut;
- ActiveRecord::Base.record_timestamps = false ile (environment.rb dosyasına ekleyerek) tüm modellerde geçerli olur.
- self.record_timestamps = false ile yazılan model için geçerli olur.
Türkçe Alan Adları
Gelelim asıl konumuza.
Artık alanlarımızı “kayit_tarihi” “guncelleme_tarihi” ÅŸeklinde oluÅŸturarak da Rails’in bu alanlara otomatik olarak kayıt yapmasını saÄŸlayabiliriz.
Bunun için environment.rb dosyasına aşağıdaki satırları eklemeniz gerekmektedir.
# muarifer, http://www.ikinoktayazilim.com/wordpress
module Muarifer
module EtkinKayit
module Zaman
# önceki fonk.ları değiştirelim
def self.included(base)
base.alias_method_chain :create, :tr
base.alias_method_chain :update, :tr
end
# oluÅŸturma tarihini otomatik kaydet
def create_with_tr
if record_timestamps
t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
write_attribute('kayit_tarihi', t) if respond_to?(*:kayit_tarihi) && kayit_tarihi.nil?
write_attribute('guncelleme_tarihi', t) if respond_to?(:guncelleme_tarihi)
end
create_with_timestamps
end
# güncelleme tarihini otomatik kaydet
def update_with_tr
if record_timestamps
t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
write_attribute('guncelleme_tarihi', t) if respond_to?(:guncelleme_tarihi)
end
update_with_timestamps
end
end
end
end
ActiveRecord::Base.class_eval {
include Muarifer::EtkinKayit::Zaman
}
Bir Not Daha
Kodlarımızı projeye dahil ettikten sonra created_at|created_on ve updated_at|updated_on alanları da güncellenmeye devam edecektir. Bu konuda sıkıntınız olmasın.
Ruby dilinin nimetlerinden yararlanarak Rails’in tablo iliÅŸkilendirmelerini belirtmek için Türkçe makrolar oluÅŸturdum. has_many için bir_cok ve belongs_to için suna_bagli.
Yani artık şöyle bir ilişkilendirme yapabiliriz.
bir_cok :cevap
suna_bagli :sinav
end
DiÄŸer iliÅŸkilendirmeleri kendiniz oluÅŸturabilirsiniz.
# muarifer , ikinoktayazilim.com/wordpress
module ActiveRecord::Associations::ClassMethods
alias :bir_cok :has_many
alias :suna_bagli :belongs_to
end
Nasıl Çalışıyor?
Anahtar Kelime: ruby alias
Seminer verirken hep yaptığımın dışında - farkında olmadan - önce Rails projesi oluÅŸturup daha sonra MySQL sunucusunu çalıştırdığımda rails’in MySQL için “.sock dosyası bulunamadı” tarzındaki hata mesajını aldım. Database.yml dosyasını açıp “Pardus” için socket dosyasını yazma giriÅŸimim ise dosyanın tam yerini bulamamamdan-bilemememden ötürü hüsranla sonuçlandı. Çareyi projeyi silip yeniden oluÅŸturmakta buldum.
Kısacası eÄŸer projeye baÅŸlamadan önce MySQL Sunucunuz açık ise Rails otomatik olarak mysql.sock dosyasının yerini buluyor ve bunu “database.yml” dosyasına yazıyor. EÄŸer sunucunuz kapalı ise ve mysql.sock dosyanız /var/temp/mysql.sock dosyasından farklı yerde ise “mysql.sock” dosyası bulunamadığı için veritabansal iÅŸlemlerinizde rails hata döndürüyor.
Ayrıca Pardus için mysql.sock dosyasının yerini de not almakta fayda var;
socket: /var/run/mysqld/mysqld.sock
Kullandığınız iÅŸletim sisteminin “mysql.sock” dosyasını nerede sakladığını bilmiyor iseniz MySQL ayar dosyanıza (my.cnf) bakabilirsiniz:
less /etc/mysql/my.cnf
- Öneri için Fatih Ergüven‘e teÅŸekkürler.
Seminer Dosyaları 05/05/07
Sunum Dosyası (Open Office) : Rails İle Ağ Uygulamaları Geliştirimi
Örnek Uygulama Dosyası
2007 Linux ve Özgür Yazılım ÅženliÄŸi‘nde Ankarada - ODTÜ - 4 Mayıs 2007 tarihinde 15:15 sularında “Günümüz web yazılımlama teknolojilerinde giderek artan popülerliÄŸe sahip olan Ruby On Rails (Rails) uygulama geliÅŸtirme altyapısının geliÅŸtiricilere kazandırdıkları, sunduÄŸu kolaylıklar, geliÅŸtiricilerin en etkin biçimde bu faydalardan nasıl yararlanabileceklerine dair basit uygulamaların da yer alacağı bir seminer hedeflenmektedir.” özetine sahip seminer vereceÄŸim inÅŸallah.
Beklerim.
Malumunuz Rails “Prototype” alt yapısını kullanarak Ajaxsal olayları içerisinde bulunan “helper” dosyaları sayesinde oldukça kolay kullanıma indirgedi.
Yazıda “bildirgeç”te bulunan “tutma” sisteminin Rails ile nasıl yapılabileceÄ?ine veya bir oy sisteminin Rails ile nasıl yapılabileceÄ?ine deÄ?ineceÄ?iz. Yazının amacı “basit” ajax olaylarını nasıl yapabileceÄ?imizin dıÅ?ında “RJS” Å?ablon sistemini kullanabilmeyi göstermektir.
UYGULAMA Ã?RNEÄ?İNE BAKABİLİRSİNİZ.
Yazının sonunda “bildirgeç” üzerinde bulunan “tuttum” yapısının daha geliÅ?miÅ? bir sürümünü elde etmiÅ? olacaÄ?ız. “Daha geliÅ?miÅ?” çünkü tutulduÄ?u anda “tutan kiÅ?ilerin” listesini de güncelleyecek.
Not: Yazıda kullanıcılar ve kullanıcı giriÅ?leri Å?eklinde bir sistemimiz olmadıÄ?ı için oluÅ?turacaÄ?ımız fonksiyonları anlık yapacaÄ?ız. BaÅ?ta belirtildiÄ?i üzere asıl amaç “RJS” ile birden fazla alan güncellemesidir.
Ortamın Hazırlanması
NetBeans’ın de yeni sürümünde (6.0) “Ruby” desteÄ?i vermesiyle daha da kızıÅ?acaÄ?a benzeyen Ruby Editörü savaÅ?larında Å?imdilik Eclipse tabanlı RadRails önde gibi dursa da NetBeans’in özellikleri & sunumları beni oldukça etkiledi. Netbeans’in “geliÅ?tirim sürümü”nü inceledim lakin henüz “kullanılabilir” bir mükemmeliyete ulaÅ?mamıÅ?. Bu nedenle aramızın soÄ?umaması için kendisini incelememe kararı aldım.
Ben inceleme yapana kadar buradan NetBeans, Eclipse (RadRails) ve IntelliJ Idea geliÅ?tirme ortamlarının Ruby destekleri hakkında fikir sahibi olabilir ayrıca karÅ?ılaÅ?tırmalarına bakabilirsiniz.
Ruby 1.8.6 & Rails 1.2.3 14/03/07
layout ‘duzen’ 07/03/07
“layout” ve sayfa düzeni üzerine
Ruby On Rails, normal Å?artlar altında sayfayı ekrana yansıtmak için ayrı bir klasörde (app/views/…) bulunan “.rhtml” uzantılı dosyaları kullanır (eruby altyapısını kullanır). Hangi dosya olduÄ?unu ise “denetleyici adı”/”sayfa ismi”.”rhtml” Å?eklinde bulur. (”Partial” dosyaların baÅ?ına “_” koyarak…)
Normal Å?artlardan kasıt eÄ?er fonksiyon sonunda sayfaya veri döndürülmemiÅ? ise (örn: render :partial, render :text gibi render komutları “sayfaya veri döndüren” komutlardır.) anlamına gelmektedir.
Normalde ekrana görünüm dosyasını yansıtırken eÄ?er “app/views/layouts” klasöründe “application.rhtml” dosyası mevcut ise yansıtılacak olan görünüm dosyası “application.rhtml” dosyasında < %= @content_for_layout %> yahut < %= yield %> bulunan yere yerleÅ?tirilir.
Ã?rneÄ?in yalnızca yönetim paneli için kullanılacak bir sayfa düzeni oluÅ?turmak isterseniz oluÅ?turacaÄ?ınız “.rhtml” dosyasını “app/views/layouts” dizinine koyduktan sonra, yönetim paneline ait denetleyicilere bunu bildirmeniz gerekecektir.
# app/views/layouts/yonetim.rhtml
#
<html>
....
<body>
< %= @content_for_layout %>
</body>
</html>
#
# Denetleyici Dosyamız
#
class Yonetim::TestController < ApplicationController
# Genel sayfa düzeni olarak 'yönetim'i kullan
layout 'yonetim'
.....
Yukarıdaki denetleyici tüm sayfalarında (sayfalardan kasıt; oluÅ?turulmuÅ? fonksiyonlardır) kendisini “yonetim.rhtml” dosyası içerisine gömecektir.
Fakat, yalnızca alanlık olan görünüm dosyaları bunun dıÅ?ındadır. (Alanlık görünüm dosyaları dosya isimlerinin baÅ?ına “_” alırlar ve render :partial ile sayfada herhangi bir yere yansıtılabilirler.)
“Partial” görünüm dosyaları sayfa düzeni ile beraber ekrana yansıtılmazlar.






