1
|
|
source
brancheında _post
dizininde yeni dosyayı görüyoruz. Buradan author, categories’i düzenliyoruz.
1 2 3 4 5 6 7 8 |
|
Sonra markdown stadanartında makalemizi yazıyoruz.
1 2 3 |
|
Publish için
1 2 |
|
Source kodlarıda source branchına gönderiyoruz.
1 2 3 |
|
Şimdilik bu kadar…
]]>gem "jquery-ui-rails"
ekledikten sonra bundle install
komutunu çalıştıralım.
Javascript kütüphanesini çağırmak için application.js
dosyasına
1
|
|
Css kütüphanesini çağırmak için application.css.scss
dosyasına
1 2 3 |
|
satırlarını ekleyelim.
Şimdi autocomplete yapılacak olan alanı oluşturalım.
1
|
|
data
autocomplete için arama yapacağı yol.
Şimdide bu alana autocomplete özelliği verelim.
1 2 3 4 5 6 7 8 9 10 |
|
.search-query
clas’ ına sahip alanlara autocomplete özelliği eklemiş olduk. source
parametresi ise autocomplete için verilerin yolu. messages
parametresi ise ismindende anlaşılacağı gibi mesaj ayarları için. “1 sonuç bulundu, Hiç sonuç bulunamadı …” gibi. Burada hiç bir mesaj döndürmüyor.
Şimdi autocomplete için json
veri döndürecek metodu yazalım.
1 2 3 4 5 |
|
Arama işlemlerinde ransack kullanıyorum kafanız karışmasın. Automoplete aranılan veriyi term
parametresi olarak gönderiyor.
Autocomplete için daha detaylı dökümana buradan ulaşabilirsiniz.
İyi çalışmalar dilerim.
]]>gem 'breadcrumbs_on_rails'
ekledikten sonra bundle:install
komutunu çalıştırarak gemi kuralım. Controller’ da add_breadcrumb
metodunu çağırarak breadcrumb ekleyebiliyoruz. View katmanında ise render_breadcrumbs
helper’ ı kullanıyoruz.
1 2 3 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Dilerseniz Dökümantasyon sayfasının ziyaret edebilirsiniz.
İyi çalışmalar…
]]>Gemfile’ a gem 'globalize3'
ekleyip bundle install
ile gemi kuralım.
Modelde I18n desteği eklenilecek fieldları belirtiyoruz.
1 2 3 4 |
|
Daha sonra migrationda translates tablosunu oluşturacak kodu ekliyoruz.
1 2 3 4 5 6 7 8 9 10 |
|
rake db:migrate
komutunu çalıştıralım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Örnekte locale :tr
iken bir veri kaydedilmediğinden nil
sonucu döndü. Eğer nil
yerine default locale değerinin dönmesini istersek application.rb
dosyasına aşağıdaki satırı ekleyelim.
1
|
|
İyi çalışmalar dilerim.
]]>pg_dump
pg_dump veritabaniadi -f dosyaadi.dump
Yedeği sıkıştırabilir.
pg_dump -Fc veritabaniadi -f dosyaadi.dump
Global veriyi almaz. (User, tablespace)
-t "satislar."
satislar tablosunun yedeğini al. -T satislar
satislar dışındaki tabloların yedeğini al.-s
-a
pg_dumpall
pg_dumpall -g -f dosyaadi.dump
-s
-a
pg_dump
& pg_dumpall
INSERT
li yedek almaz. Bunun yerine COPY
kullanılır. Sebebi her INSERT
işleminin TRANSACTION
içerisinde olmasıdır.Kesinlikle pg_dump
kullanın, yedeği sıkıştırın, global bilgileri pg_dumpall
ile alın. Geri yüklerken önce global veriler yüklenir.
pg_restore
pg_restore -d veritabaniadi yedek.dump -j 4
-j
parelel oturum.ab2013 postgresql eğitim notlarından.
İyi çalışmalar.
]]>Yeni bir rails
uygulaması oluştururken genel görevleri otomatikleştirmek için yardımcı ruby
script. Örneğin her rails
projesinde devise
gemini kullanıyorsak bunu her seferinde eklemek yerine template’ e ekleyip aynı işlemleri tekrarlamaktan kurtulabiliriz.
Template oluşturmak için ne bir generator
nede bir gem
kullancağız. İçerisine bazı metodlar yazabileceğimiz bir ruby
dosyası yeterli :)
Yeni bir uygulama oluştururken -m
parametresinden sonra template yolunu yazıyoruz.
1 2 |
|
Yada rails:tempalte
rake’ ini kullanabiliriz.
1 2 |
|
gem
metodu Gemfile dosyasın gem eklenmesini sağlıyor.
1 2 3 |
|
NOT:
gem
metodu gemi ekliyor ama kurmuyor. Yani biz gemleri ekledikten sonrabundle install
metodunu çalıştırmalıyız.
Grup içerisine gem yazmamızı sağlar.
1 2 3 4 5 |
|
Gemler için source eklememizi sağlar.
1
|
|
config/initializers
klasörü altına initializer dosyası eklememizi sağlar.
1 2 3 4 5 6 |
|
lib/tasks
altına rake oluşturuyor
1 2 3 4 5 6 |
|
generate
metodu rails generator
’ lerini çalıştırmamızı sağlıyor.
1 2 |
|
run
metodu ismindende anlaşılcağı gibi sistem komutlarını çalıştırmaya yarıyor.
1 2 |
|
rake
çalıştırmamızı sağlıyor.
1 2 3 4 |
|
Route config/routes.rb
dosyasına routing entry eklememizi sağlar.
1
|
|
Klasör içerinde komut çalıştırmamıza yarar.
1 2 3 4 |
|
Kullanıcıdan bilgi alınmasını sağlar.
1 2 3 4 5 6 7 |
|
Kullanıcya soru sormamızı sağlarlar.
1 2 3 4 5 |
|
Git komutlarını kullanmamızı sağlıyor.
1 2 3 |
|
create_file
metodu yeni bir dosya oluşturur.
1 2 3 4 |
|
Dosya içerisinde text değiştirmemizi sağlar. flag
parametresi string ve regex bir ifade olabilir.
1
|
|
Dosya siler.
1 2 |
|
Dosya içerisine text eklememeizi sağlar. :after
ve :before
parametreleri ile nereye ekleme yapılacağını belirtebiliriz.
1 2 3 4 5 6 7 8 9 10 |
|
Dosyaya text eklememizi sağlar.
1 2 3 4 5 |
|
Verilen adresteki içeriği alır ve hedef kaynağa yerleştirir. Yani hedef doyaya yazar.
1 2 |
|
Genel olarak sık kullandığımız metodları yazamaya çalıştım. Aşağıdaki linklerden daha fazla kaynağa ulşabilirsiniz. Dilerseniz lab2023 rails temaplate’ i inceleyebilrsiniz.
Kaynaklar: http://guides.rubyonrails.org/rails_application_templates.html https://github.com/wycats/thor/wiki/Actions http://textmate.rubyforge.org/thor/Thor/Actions.html http://rdoc.info/github/wycats/thor/master/Thor/Actions
İyi çalışmalar…
]]>Merge işlemlerini kesinlikle komut satırından yapın.
1 2 |
|
Kodları test edin
Üçüncü part javascript
, css
dosyaları varmı bakın.
Varsa bunlar environments/production.rb
ye eklenmişmi ona bakın. Assets precompile için.
Kendisine merge yapılcak branch’ taki kodların güncel olduğundan emin olun.
1 2 3 |
|
config/deploy.rb
dosyasını kontrol edin. IP, user, port…cap deploy
komutu ile deploy edilir.cap deploy:migrate
komutu çalıştırılır.cap --tasks
komutunu çalıştırarak bakabilirsiniz.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
cap deploy:restart
komutu ile unicorn restart edilir.1
|
|
1 2 |
|
İyi çalışmalar dilerim…
]]>:path
parametresi ile dosyanın hangi path altına kaydedeliceğini belirtebiliyoruz. Product
modelindeki :picture
için bir path belirledik. Dosyalar public/system/products/pictures/
dizinin altına :style(original, icon, small, large)
klasörününde içine "#{id}-#{name.parameterize}.format"
olarak kaydedilyor. Linklerde http://localhost:3000/system/products/pictures/original/1-bilgisayar.jpeg
şeklinde oluyor. Peki biz bu path’ i ürün production’ a çıktıktan sonra değiştirirsek ne olur ?. Ne olacak tüm dosya linkleri patlayacak :) Yani eski dosyaları yeni path ile tekrar kaydettirmemiz gerekecek.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 |
|
`
Dosyalar için bir
:path
belirtmezsekpaperclip
dosyaları default path ile kaydediyor.
Resimler şimdi public/system/products/pictures/000/:id/:style
şeklinde kaydediliyor. Şimdi eski doyaları bu path altına yeniden kaydedelim. Bunun için kısa bir rake yazacağız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
filename
’ e eski yolu atıyoruz. Eğer böyle bir yol var ise dosyayı yeniden kaydediyoruz. Kaydedilen dosyada yeni path ile kaydediliyor. Eski dosyalar hala duruyor ama.
Son olarakta Rake’ i çalıştıralım
1
|
|
İyi çalışmalar dilerim
]]>Ransack
ile kolay bir şekilde arama ve sıralama işlemlerini yapabiliyoruz. Gemfile
dosyasına
gem 'ransack'
satırını ekledikten sonra bundle install
ile kuralım.
Arama için search
metodunu kullanıyoruz.
1 2 |
|
or
kullanıyoruz.1 2 |
|
1 2 3 4 5 6 7 8 9 10 |
|
1 2 |
|
1 2 |
|
Tamamda bu sondaki cont
ne işe yarıyor ? diye sorular duyar gibi oluyorum. cont
Ransack
eylemlerinden birisi. Yani nasıl arama yapacağını belirtiyoruz. İçerisinde aaaa geçsin, aaaa ile başlayanler vs. vs. cont
içerisinde aaaa geçen kayıtları getiriyor. Diğer Ransack
eylemlerini şu linkten incleyebilrsiniz. https://github.com/ernie/ransack/wiki/Basic-Searching
1 2 3 4 |
|
:q
. İstersek değiştirebiliyoruz. https://github.com/ernie/ransack/wiki/ConfigurationDISTINCT
) :distrinct => true
parametresini geçiyoruz.1 2 3 4 |
|
1 2 3 |
|
sort_link
helper metodunu kullanıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
İyi çalışmalar dilerim.
]]>to_xls
gemini kullanıyoruz. Export edilen excel dosyaları xls
uzantısında oluyor.
Excel renderlermek için config/initializers/mime_types.rb
doyasına mime type eklemeyi unutmuyalım.
1
|
|
Gemfile dosyasına gem 'to_xls'
ekleyip bundle install
ile kuruyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
@users
koleksiyonu içindeki ilk itemin propertilerine göre @users
koleksiyonunu export eder. Properti ismileri kolon başlığı olarak kabul edilir.
Eğer kolonlara başlık vermek istemiyorsak :headers => false
parametresini geçiyoruz.
1
|
|
Sheet ismini belirtmek istiyorsak :name => "Users"
parametresini geçiyoruz. Varsayılanı Sheet1
1
|
|
Propertilerin hepsini değilde seçtiklerimizi export etmek istersek :columns
parametresi ile bunu belirtebilyoruz.
1
|
|
Bu kolonların isimlerini değiştirmek istersek :headers
parametresini kullanıyoruz.
1
|
|
Peki ilişkili kayıtlarıda export edebiliyor muyuz ? Evet ilişkili kayıtlarıda export edebiliyoruz.
1
|
|
company
modelindeki :name
ve :address
propertilerini aldık.
Böyle export edince kolon isimlerini company_name , company_address şeklinde oluşturacaktır. Kolon isimlerini değiştirmek için yine :headers
parametresini kullanabiliriz.
1
|
|
İyi çalışmalar dilerim…
]]>HTTPS
kullanın. Çünkü HTTP
kullanıldığında parametreler plain text olarak iletiliyor. Http Request
’ leri dinleyen birisi keylerinize çok rahat ulaşabilir.
access_token
’ ları url den parametre olarak almak yerine Http Header
’ dan almak daha uygundur. Çünkü kullanıcı alışkanlıkları (kopyala-yapıştır-test et) yönündedir. URL de unutulan tokenlar güvenlik için tehlikeli olabilir.
Kullanıcı doğrulama ile ilgili daha önce yazdığım Ruby On Rails REST API’ de HTTP Basic Authentication Kullanarak Kullanıcı Doğrulama yazısını okuyabilirsiniz.
API
’ de güvenliği sağlamanın diğer bir yolu ise API
’ yi kullanacak client’ lara bir API_KEY
verip o API_KEY
ile authenticate yapmak. Bu yöntemi kullanırsak API_KEY
leri saklamak için bir modele ihtiyacımız olacak.
Bu modelde;
user_id
access_token
expires_at
alanlarını tutacağız. Eğer API_KEY
ömrünü kısıtlamak istemiyorsanız expires_at
alanına ihtiyacınız yok.Ben burada örneği kısa tutmak için user_id
ve expires_at
alanlarını kullanmayacağım.
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
Burada access_token
üretmek için ruby 1.9
’ la gelen SecureRandom.hex
metodunu kullanarak 16 haneden oluşan string
bir access_token
oluşturuyoruz. Eğer oluşturulan bu access_token
daha önceden oluşturulmuş ise kod daha önceden oluşturulmayan bir access_token
üretinceye kadar tekrar çalışıyor.
Şimdi bir ApiKey oluşturup devam edelim.
1 2 3 4 5 6 7 8 9 10 |
|
Controller
’ a access_token
kontrolü yapan bir metod yazacağız;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
http://pigon.dev/api/products
adresini açtığımızda bize hiçbir datanın dönmediğini görüyoruz. Birde query olarak access_token
ekleyerek bakalım;
Evet gördüğünüz gibi urlden acces_token
alarak datalara erişim kısıtlaması getirebiliyoruz. access_token
’ bilgilisini URL
’ den almak yerine HTTP Header
dan alalım.
Rails
’ te HTTP header
’ dan access_token
almak için authenticate_or_request_with_http_token
metodunu kullancağız.
1 2 3 4 5 6 7 |
|
Eğer Rails::API
gem’ ini kullanıyorsak ActionController::HttpAuthentication::Token::ControllerMethods
modülünü Controller
’ a eklememiz gerekiyor.
1 2 3 |
|
1 2 |
|
Komut satırından baktığımızda kodlarımızın çalıştığını görüyoruz.
İyi çalışmalar.
Kaynak: RailsCasts
]]>Rails::API
gem’ ini kullanarak API
geliştirmeyi anlatacağım.
Rails::API
bir API
için gerekli olan kütüphaneler dışındaki kütüphaneleri çıkararak(view, assests …), normal bir rails projesine göre daha hafif bir proje oluşturabilmemizi sağlayan gem.
Aşağıdaki komutu çalıştırarak gem’ i yükleyelim
gem install rails-api
Yeni proje oluşturmak için aşağıdaki komutu kullanacağız.
rails-api new pigon
Komutu çalışıtrdıktan sonra projenin dosyalarına baktığımızda app
dizininin çok sade olduğunu görüyoruz. API geliştirme ihtiyacı dışındaki şeyler(views, helpers, assets) atılmıştır. ApplicationController
’ a baktığımızda ActionController::Base
yerine daha hafif olan ActionController::API
’ den türetildiğini görüyoruz.
1 2 |
|
En büyük değişiklik ise Gemfile
dosyamızda. rails-api
gem’ ini buraya eklenmiş olarak görüyoruz fakat assets
grubundaki gem’ lerin ve jquery-rails
gem’ inin eklenmediğini görüyoruz.
1 2 3 4 5 6 7 8 9 10 |
|
Peki generator’ larda nasıl bir değişiklik oluyor?. scaffold
ile Product
modeli oluşturduğumuzda assets
, views
ve helpers
dosyalarının oluşturulmadığını görüyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Gördüğünüz gibi model
, controller
ve test
dosyalarından oluşan bir yapı oluşturuldu. Şimdi migration’ ı çalıştıralım.
1
|
|
scaffold
tarafından generate edilen ProductsController
’ ına baktığımızda sadece JSON
formatında veri döndürüldüğünü göreceksiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
|
Uygulamamızın hiç HTML
view renderlemediğini sadece JSON
renderlediğini görüyoruz. Tarayıcımızda /products
yolunu ziyaret ettiğimizde JSON
formatında henüz ürün eklemediğimiz için boş bir array
renderlediğini göreceğiz.
curl
ile uygulamamıza product ekleyelim.
1 2 |
|
/products
adresini ziyeret ettiğimizde
1 2 3 4 5 6 7 8 9 |
|
JSON
formatında eklediğimiz ürünü görüyoruz.
Şimdide uygulamamıza XML
desteği ekleyelim.
Burada respond_to
metodunu kullanacağız.
1 2 3 4 5 6 7 8 9 |
|
/products.xml
sayfasını ziyaret ettiğimizde aşağıdaki hatayı alacağız.
1 2 3 |
|
Rails::API
de uygulamayı daha hafif hale getirmek için bir dizi özellik çıkarılmış durumda ama biz istersek bu özellikleri kolayca uygulamalarımza geri ekleyebiliriz. Yukarıdaki aldığımız hata da ActionController::MimeResponds
modülü etkin olmadığından kaynaklanıyor. ProductController
’ a ActionController::MimeResponds
modülünü ekleyelim.
1 2 3 4 |
|
Rails::API
README dosyasında ihtiyacımız çerçevesinde hangi modulleri kullanabilecegimiz listelenmiştir. Ancak bu liste modüllerin tam listesi değil. Rails
kodları ile Rails::API
nin kodlarını karşılaştırdığımızda bu listedeki eksik olanları görebiliyoruz.
Bazı modülleri kullanmak istediğimizde modülü sadece controller’ da çağırmak yetmeyebibilir. Rails::API
Controller
’ ları azalttığı gibi aynı zamanda Rack middleware
katmanınıda azaltmıştır. Normal bir rails uygulamasındaki middleware’ lar ile Rails::API
gem’ ini kullanarak olulturduğumuz bir uygulamadaki middleware’ ları karşılaştırırsak aşağıdaki middleware’ ların çıkarılmış olduğunu görüyoruz.
1 2 3 4 5 |
|
İhtiyacımız çerçevesinde bu middleware’ ları application.rb
ye ekleyerek kullanabiliriz.
Rails::API
kullanırken karşılaşılan sorunların birçoğu issuelarda çözülmüş. https://github.com/rails-api/rails-api/issues?page=1&state=closed Gözatmakta fayda var.
İyi çalışmalar…
]]>scp
komutunu kullanarak;
dosya kopyalama işlemlerini yapabilyoruz.
1
|
|
Burada;
~/Dropbox/pigonws/_20120731_2255.sql
: Yerel bilgisayardaki dosyanın yolu.
deployer@10.1.2.3:~/apps/backups
: kullanıcı @ sunucu ip si : sunucudaki yol.
Komutu çalıştırdıktan sonra ssh ile uzak bilgisayara bağlanıp yerel bilgisayardaki _20120731_2255.sql
dosyasını uzak bilgisayardaki ~/apps/backups
dizininin altına kopyalıyoruz.
1
|
|
Açıkçası bunu hiç denemedim. Şuradaki linkten http://askubuntu.com/questions/153960/scp-with-two-different-ports bakabilrsiniz.
-P
: SSH portunu belirtme.-q
: Progress barı gösterme.-r
: Klasör kopyalayacaksak.-v
: Debug mesajlarını göster.İyi çalışmalar…
]]>root
şifreside unutulurmu demeyin valla unutuluyor :)
MySQL
server durdulur1 2 3 |
|
--skip-grant-tables
parametresi ile güvenli modda tekrar başlatalım. Güvenli modda başlatınca yetkilerin hiçbirisi dikkate alınmayacak.1
|
|
MySQL
konsoluna giriş yapalım1
|
|
root
şifresini değiştirelim1 2 3 4 |
|
MySQL
sunucusunu başlatalım1
|
|
İyi çalışmalar…
]]>MySQL
’ e login olalım1
|
|
1
|
|
pigon_production
isminde bir veritabanı oluşturduk.
pigon_production
’ ı kullanabilmesi için yetki verelim.1 2 |
|
Artık pigon
kullanıcısı oluşturuldu ve pigon_production
veritabanını kullanma yetkisi verildi. Buradaki yetki GRANT ALL
komutundan da anlaşılacağı gibi veritabanı üzerinde tüm işlemleri yapabilme yetkisidir.
Kolaylıklar…
]]>ssh
portu default olarak 22 dir. Güvenlik için istersek bunu değiştirebiliyoruz.
nano
ile /etc/ssh/
dizinindeki sshd_config
dosyasını açıp 5. satırdaki Port 22
yazan yerdeki 22
portunu değiştirip kaydediyoruz.
1
|
|
Değişiklikler algılaması için aşağıdaki komut ile ssh
’ ı yeniden başlatıyoruz.
1
|
|
Localden bağlanırken portu belirtiyoruz.
1
|
|
-p parametresi ile portu belirtmiş olduk.
Eğer deploy işlemleri için Capistrano
kullanıyorsak deploy.rb
dosyasında aşağıdaki gibi portu belirtiyoruz.
1
|
|
İyi çalışmalar
]]>mysqladmin
komutunu kullanarak1
|
|
-pcurrentpassword teki
p
ilecurrentpassword
bitişik. Bu alana şimdiki şifremizinewpassword
alanınan da yeni şifremizi yazıyoruz.
UPDATE
sql komutunu kullanarak1) Mysql server’ a login olalım;
1
|
|
2) mysql database’ ini seçelim;
1
|
|
3) Aşağıdaki sql komutuyla şifreyi değiştiriyoruz;
1
|
|
4) Yetkileri yenileyelim;
1 2 |
|
NOT:
MySQL
kullancı bilgilerimysql
database’ inde tutulmaktadır. Step2 demysql
database’ ini seçerek işlemlere devam ettik.
İyi çalışmalar…
]]>root
olarak oturum açtıktan sonra;
passwd
komutunu çalıştırarak root şifresinipasswd username
komutunu çalıştırarak diğer kullanıcların şifrelerini değiştirebiliriz.Kolaylıklar…
]]>mysqldump -u username -p database> backup_20121022.sql
mysql
şifresini girdikten sonra bulunduğumuz dizine backup_20121022.sql
isminde bir dosyaya veritabanı yedeğini alıyor.
İyi çalışmalar.
]]>Simple Form
ile çalışabilmesi içinde ClientSideValidationsSimpleForm gemini kullanıyoruz.
Gemleri Gemfile
’ a ekleyip bundle install
yapalım
1 2 |
|
Daha sonra kurulum komutunu çalştıralım.
1
|
|
config/initializers/client_side_validations.rb
başlangıç dosyasının eklendiğini görüyoruz.
Eğer istersek gem’ lerin kullandığı javascript dosyaların assets dizinin altına kopyalayabiliriz.
1
|
|
app/assets/javascripts/application.js
dosyasında gerekli dosyaları çağıralım.
1 2 |
|
Forma :validate => true
parametresini geçiyoruz.
1 2 3 4 5 6 7 8 9 10 |
|
Şimdide modele gidip validasyonları yazalım.
1 2 3 4 5 6 7 8 9 10 |
|
İstersek validasyonları form içinde tek bir input’ a da ekleyebiliyoruz.
1
|
|
Son ekran görüntüsünde dikkat ettiyseniz ajax ile uniq olup olmadığını bile kontrol edebiliyor.
En kısa sürede lab2023 bünyesinde open-source
olarak geliştirdiğimiz Rails Template’ e ekleyeceğiz. Issue’ yu girdim bile :)
İyi çalışmalar dilerim.
]]>