Olusturdugumuz blog projesine devam edip basit bir blog oluşturalım:Terminal ekranından projemizin olduğu dizine gelip controller olusturalım:
rails generate controller posts
Proje klasörü içerindeki config=>routes.rb dosyasına:
root 'posts#index'
resources :posts
ekleyelim burdaki root eylemi localhost:3000 sayfasının index sayfasına yönlendirmesidir.
terminale; rake routes yazalım: edit,shoe, new gibi sayfa yönlendirmeleri otomatik olarak oluşmus durumda, app=>views=>posts klasörü içerinine
edit.html.erb
index.html.erb
new.html.erb
show.html.erb
dosyalarını olusturalım. daha sonra controler klasörü içerisinde bulunan posts_controller.rb klasörüne eylem methodlarını tanımlayalım:
def index
end
def show
end
def new
end
def create
end
def edit
end
def update
end
def destroy
end
ilk açılacak olan sayfamız index.html i düzenleyelim. BUrada veri tabanımızdaki tüm kayıtlar gösterilecek. Bu komutu(all) controller içerisindeki index methodunun içerisine şu şekilde yazalım:
def index
@posts=Post.all
end
views=>posts=>index.html.erb içerisine;
Burada link_to methodu ile yazı baslıgına tıkladığımızda yazı içeriğinin görüntülenmesini sağladık.
alt kısımda bulunan new_post_path ifadeside new methodu ile acılmasını istediğimiz yeni yazı ekleyebileceğimiz sayfaya gitmemizi sağlayan method. BU methodun çalısması için controller içerisindeki show içerisine şu komutu yazalım:
def show
@post=Post.find(params[:id])
end
Suana kadar olnalara bir bakalım,
terminalden rails s ile serverı çalıstırıp localhost:3000 adresine gittiğimizde:
Yeni yazı eklemek için controller.rb içerisindeki new methodu içerisine aşağıdaki komutu ekleyelim:
def new
@post=Post.new
end
views=>posts=>new.html.rb dosyasına aşağıdaki komutları yazalım:
Ekle butonuna tıkladığımızda girdiğimiz verileri ekleyebilmesi için controller.rb içerisindeki create methoduna aşağıdaki komutları ekleyelim:
def create
@post=Post.new(post_params)
if @post.save
redirect_to posts_path, notice=>"yeni blog yazısı kaydedildi"
else
render "new"
end
end
private
def post_params
params.require(:post).permit(:title, :content)
end
end
post_params methodu gelen veriyi veritabanına eklenebilecek şekilde düzenliyor. Buradan gelen veri eğere kaydedildiyse true değeri dönüyor. burada redirect_to ile sayfayı yönlendiriyoruz. Yönlendirirkende sayfa üzerine not düşüyoruz. Bunun için views=>layout=>application.html.erb dosyasının body tagları arasına:
<% flash.each do |key,value| %>
<p><%= value%></p>
<% end %>
<%= yield %>
komutlarını yazıyoruz buradaki value değeri notice keyine atadığımız hata stringidir.
controller içerisindeki create methoduna dönersek, buradaki else kısmındaki render ise kayıt olmadıgında new bölümünde kalmasını sağlar.
Blogumuzdaki son duruma bakalim: