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:






