Yigit C. Bacakoglu Yazılım Mühendisi | Rubyist | Mekanist on Rails

  16/12/2013 at 19:53       by yigit     under ,

Rails eğitim yazılarımda bugün sizinle birlikte basit bir Rails uygulaması yapacağım. Her öğlen ofiste 'Ne Yesek' diye birbirimize sormak yerine rastgele bir öneri sunan bir web uygulaması güzel olmazmıydı?


Bu uygulumayı Rails 3.2.13 versiyonu ile yapacağız.


Konsoldan yeni projemizi oluşturalım.

rails _3.2.13_ new neyesem
( Default rails versiyonu ile yapmak isterseniz: rails new neyesem )

cd neyesem

projemizi oluşturduk, şimdi gidilebilecek yerleri kaydetmek için bir model yapısı kuralım. Basit bir tabloda sadece mekan isimlerini yazmamız yeterli. Bunun için mekan modeli oluşturalım ve tabloda string türünden isim kolonu olsun. Daha sonra yeni mekanlar kaydetmek, editlemek için controller yazalım ve gerekli route ve html dosyalarını ayarlayalım.

Korkutucu geldiyse iyi haberim var:) Rails ile tek satır konsol komutuyla bunların hepsini yapabiliriz. işte sihirli sözcük: scaffolding

rails g scaffold mekan isim:string
#Bu yazdığımız kod aşağıdakileri otomatik olarak oluşturacak
      invoke  active_record
      create    db/migrate/20131216200257_create_mekans.rb
      create    app/models/mekan.rb
      invoke    test_unit
      create      test/unit/mekan_test.rb
      create      test/fixtures/mekans.yml
      invoke  resource_route
       route    resources :mekans
      invoke  scaffold_controller
      create    app/controllers/mekans_controller.rb
      invoke    erb
      create      app/views/mekans
      create      app/views/mekans/index.html.erb
      create      app/views/mekans/edit.html.erb
      create      app/views/mekans/show.html.erb
      create      app/views/mekans/new.html.erb
      create      app/views/mekans/_form.html.erb
      invoke    test_unit
      create      test/functional/mekans_controller_test.rb
      invoke    helper
      create      app/helpers/mekans_helper.rb
      invoke      test_unit
      create        test/unit/helpers/mekans_helper_test.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/mekans.js.coffee
      invoke    scss
      create      app/assets/stylesheets/mekans.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss

Gördüğümüz gibi database migration dosyamızda oluştu. Şimdi o dosyanın çalışması için bir komut daha yazalım.


rake db:migrate

Database oluştu. Teste hazırız...Serverımızı başlatalım:


rails s

Web tarayıcınızı açın ve localhost:3000/mekans adresine gidin. Bu adresi nerden mi biliyorum?


yigits-pro:neyesem yigitcan$ rake routes
    mekans GET    /mekans(.:format)          mekans#index
           POST   /mekans(.:format)          mekans#create
 new_mekan GET    /mekans/new(.:format)      mekans#new
edit_mekan GET    /mekans/:id/edit(.:format) mekans#edit
     mekan GET    /mekans/:id(.:format)      mekans#show
           PUT    /mekans/:id(.:format)      mekans#update
           DELETE /mekans/:id(.:format)      mekans#destroy

Gördüğünüz gibi rake routes komutu projemizdeki tüm pathleri gösteriyor.

Evet, http://localhost:3000/mekans adresine gittiğinizde mekanlarımızın index sayfasını görüyorsunuz ve 'New Mekan' ile yeni mekan oluşturup onu düzenleyip silebiliyorsunuz.. Sizce de bu çok hızlı olmadı mı? :)


Sanki bir şey eksik... localhost:3000 adresine gittiğinizde varsayılan rails ekranı geliyor. Onun yerine rastgele mekan isimleri gelse nasıl olur? Bunun için ana sayfamızı yayınlayan bir controller oluşturalım. Adını da HomeController koyalım.

Bu controllerı sadece index sayfası için kullanacığımız için sadece index fonksiyonu, pathi, html dosyası yeterli olacak:


rails g controller Home index
#Otomatik oluşturulan dosyalar:
      create  app/controllers/home_controller.rb
       route  get "home/index"
      invoke  erb
      create    app/views/home
      create    app/views/home/index.html.erb
      invoke  test_unit
      create    test/functional/home_controller_test.rb
      invoke  helper
      create    app/helpers/home_helper.rb
      invoke    test_unit
      create      test/unit/helpers/home_helper_test.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/home.js.coffee
      invoke    scss
      create      app/assets/stylesheets/home.css.scss

Daha sonra varsayılan rails sayfasını kaldıralım.


rm public/index.html

ve anasayfamızı home_controller.rb'nin index action'u olarak ayarlayalım. config/routes.rb dosyanzı açın ve aşağıda ki satırı ekleyin:


root :to => 'home#index'

localhost:3000 adresine tekrar gidin ve herşeyin doğru yaptığınızı göreceksiniz. Serverı kapattıysanız rails s ile açmayı unutmayın:)


Home#index
Find me in app/views/home/index.html.erb

Şimdi app/controllers/home_controller.rb dosyamızın index actionunda rastgele mekan ismi seçelim ve onu ekranda gösterelim..


  def index
   @mekan = Mekan.pluck(:isim).sample
  end

Bu kod tüm kayıtlı mekanların isimlerini bir Array'e koyuyor ve 'sample' bir tanesini seçiyor ve bunu @mekan değişkenine atıyor.


app/views/home/index.html.erb dosyasını açın içeriği silin ve aşağıdaki kodu yazın:


<%= @mekan %>

Tekrar ana sayfaya gittiğinizde, kayıtlı mekanlar içinden rastgele isimler geldiğini göreceksiniz.


Bugünlük bu kadar, siz projeyle biraz daha oynamaya devam edebilirsiniz, mesela ana sayfadan 'Yeni Mekan' için link koyabilirsiniz.

Kaynak Kodlar


Görüşmek üzere..

Comment Ruby on Rails Başlangıç - Rails ile 'Ne Yesem' uygulaması