Projemizi olusturup scanfold ile model ekleyelim. Amacımız projeye giriş oturumu olusturmak. editor olarak sublimeText kullanılcak. kurulu değilse:
$sudo apt-get install sublime-text
sublime acmak için : #subl .
$ rails new DeviseGem
$ cd DeviseGem
$ bundle
$ rails generate scaffold Post title:string context:text
$ rake db:migrate
$ subl .
config/routes.rb dosyasına aşağıdaki komutu ekleyelim
root 'posts#index'
$rails s ile çalıştırıp bir iki tane veri ekleyelim
Gelelim Devise modeline,
Gemfile dosyasına: gem 'devise'
$ bundle
$ rails generate devise:install
$rails generate devise User
$rake db:migrate
app/controller/post_controller.rb
before_action :authenticate_user!
Bu komut kullanıcı giriş yapamadan post modeliyle alakalı hiç bi işlem yapamasını engeller
$rails s ile çalıştırıp bakalım:
Ek bilgi:
* user_signed_in? Kullanıcı giriş yaptımı? true/false döner
* current_user Giriş yapan kullanıcı bilgilerini getirir.
Peki giriş yapan kişi nasıl çıkış yapacak? Bunun için layout/application.html.erb
<% if user_signed_in? %>
<li>
<%= link_to('Çıkış', destroy_user_session_path, :method => 'delete') %>
</li>
<% end %>
Devise arayüzünü değiştirmek istersek gemde kullanılan sayfaları projemize eklememiz gerek
$ rails generate devise:views
app/view/devise/sessions/new.html.erb sayfası oturum giriş sayfası
app/view/devise/registration/new.html.erb sayfası kullanıcı oluşturma sayfası
giriş sayfasını değiştirelim:
Controllerda değişiklik yapmak istersek, örneğin user modeline yeni bi alan ekleyip kayıt esnasında bu bilginin de olmasını istersek bu controllerda düzenleme yapmak durumundayız
$ rails generate devise:controllers users
Modelimize cinsiyet bilgisi ekleyelim
registration/new.html.rb ve edit.html.rb de alan ekleyelim:
<div class="field">
<%= f.label :cins %><br />
<%= f.text_field :cins %>
</div>
Sign up dersek cinsiyet bilgimizi eklemez bunun için kontrollarda düzenleme yapmamaız gerekiyor.
Controlların altına registrations_controller.rb dosyası oluşturalım ve içeriğini burdan kopyalayalım.
config/routes.rb
devise_for :users, :path_names => { :sign_up => "register" },:controllers => {:registrations => "registrations"}
dosya içerisindeki sign_up_params ve account_update_params methodlarının içerisine;
params.require(:user).permit(:cins, :password, :password_confirmation, :current_password, :email)
Sign up yaptımızda bakalım cinsiyet bilgisi eklenmişmi? Rails consola gidip bakalım:
$ rails c
$ User.last
cinsiyet bilgisi eklendi, arayuzde ufak bi değişiklikle gösterebiliriz. post.index sayfasında gösterelim.
<%=current_user.cins%>
projeyi burdan indriebilirsiniz