menu

Showing posts with label Rails. Show all posts
Showing posts with label Rails. Show all posts

Rails - Authentification (logout)


Ini adalah artikel pertama pada tahun 2017, sudah lama vakum karena liburan akhirnya bisa kembali ngeblog.

Pada tutorial sebelumnya kita sudah membuat sebuah function login pada project Ruby on Rails, sekarang kita akan melanjutkan tutorialnya dengan menambahkan function logout.

Pertama, edit file routes.rb pada path config/ dengan menambahkan route logout sehingga akan tampak seperti ini,
Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  # root 'application#hello'
  get 'users' => 'users#index'

  get '' => 'home#index'

  get 'signup' => 'users#_signup'
  post 'signup' => 'users#_addUser'

  get 'login' => 'auth#index'
  post 'login' => 'auth#create'
  delete 'logout' => 'auth#logout'

  get 'edit/:id' => 'users#_show', as: :user
  post 'edit/:id' => 'users#_edit'

  delete 'delete/:id' => 'users#_delete'
end

Selanjutnya, tambahkan function logout dengan mengedit controller auth_controller.rb pada path app/controllers/ sehingga akan tampak seperti ini,
class AuthController < ApplicationController
 def index
 end

 def create
  @user = User.find_by_email(params[:session][:email])
  if @user && @user.authenticate(params[:session][:password])
   session[:user_id] = @user.id
   redirect_to '/'
  else
   redirect_to 'login'
  end
 end

 def logout
  session[:user_id] = nil
  redirect_to '/'
 end
end

Kemudian, tambahkan link untuk logout yang akan kita tempatkan pada file application.html.erb pada path app/layouts/ sehingga codenya akan tampak seperti ini,
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Page</title>
    <%= csrf_meta_tags %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
 <div class="header">
  <div class="content">
   <div class="left-float">
    <a href="/" class="button-header">Home</a>
    <div class="dropdown">
     <a class="button-header dropbtn" onclick="myFunction()">Table</a>
     <div id="myDropdown" class="dropdown-content">
      <a href="/users">User</a>
      <a href="#">Link 2</a>
      <a href="#">Link 3</a>
     </div>
    </div> 
   </div>
   <div class="right-float">
    <% if current_user %>
     <%= link_to 'Logout', logout_path, method: :delete, data: { confirm: 'Are you sure to logout?' } %>
    <% else %>
     <a href="/login" class="button-header">Login</a>
    <% end %>
   </div>
  </div>
 </div>
 <div class="isi">
     <%= yield %>
    </div>
    <div class="footer">
  COPYRIGHT © 2016 CODEDOCT.COM ALL RIGHTS RESERVED.
 </div>
  </body>
</html>

Terakhir, buat tanda sedang login atau tidak dengan mengedit file index.html.erb pada path app/views/home/ menjadi seperti ini,
<%= provide(:title, "Home") %>
<h1 class="text-center">Welcome to my ruby website <% if current_user %><%=current_user.email%><% else %>Guest<% end %></h1>
<br>
<p>
 Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
 tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
 quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
 consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
 cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
 proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>

Sehingga tampilan saat sedang tidak login akan tampak seperti ini,


Sedangkan tampilan saat sedang login dan akan logout akan tampak sepreti ini,



===DONE!===

Rails - Authentification (login)


Melanjutkan tutorial sebelumnya kita sudah menyiapkan database untuk keperluan login. Tutorial kali ini kita akan membuat sistem login yang akan menyimpan session pada Ruby on Rails.

Oke, langsung saja kita mulai prakteknya,

Pertama, buat terlebih dahulu route untuk loginnya dengan mengedit file routes.rb pada path config/ menjadi seperti ini,
Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  # root 'application#hello'
  get 'users' => 'users#index'

  get '' => 'home#index'

  get 'signup' => 'users#_signup'
  post 'signup' => 'users#_addUser'

  get 'login' => 'auth#index'
  post 'login' => 'auth#create'

  get 'edit/:id' => 'users#_show', as: :user
  post 'edit/:id' => 'users#_edit'

  delete 'delete/:id' => 'users#_delete'
end

Selanjutnya, buat file controller baru dengan nama auth_controller.rb pada path app/controllers/ dan ketikkan code berikut,
class AuthController < ApplicationController
 def index
 end

 def create
  @user = User.find_by_email(params[:session][:email])
  if @user && @user.authenticate(params[:session][:password])
   session[:user_id] = @user.id
   redirect_to '/'
  else
   redirect_to 'login'
  end
 end
end

Kemudian buat file view baru pada folder baru juga, dengan nama file index.html.erb pada path app/views/auth/ ketikkan code berikut,
<%= provide(:title, "Login") %>
<div class="text-center">
 <h1>Login</h1>
 <br><br>
 <div class="form-group">
  <%= form_for(:session, url: login_path) do |f| %>
     <%= f.email_field :email, :placeholder => "Email", class: 'form-input', required: true %><br>
     <%= f.password_field :password, :placeholder => "Password", class: 'form-input', required: true %><br>
   <div class="left-float">
    <%= f.submit "Login", class: "btn-submit" %>
    OR <a href="/signup">Sign Up</a>
   </div>
  <% end %>
 </div>
</div>
<br>

Setelah itu tambahkan penanda jika sudah login, dengan mengedit file application.html.erb pada path app/views/layouts/ menjadi seperti ini,
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Page</title>
    <%= csrf_meta_tags %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <div class="header">
     <div class="content">
      <div class="left-float">
       <a href="/" class="button-header">Home</a>
       <div class="dropdown">
        <a class="button-header dropbtn" onclick="myFunction()">Table</a>
        <div id="myDropdown" class="dropdown-content">
         <a href="/users">User</a>
         <a href="#">Link 2</a>
         <a href="#">Link 3</a>
        </div>
       </div> 
      </div>
      <div class="right-float">
       <% if current_user %>
        <a href="/" class="button-header"><%= current_user.email %></a>
       <% else %>
        <a href="/login" class="button-header">Login</a>
       <% end %>
      </div>
     </div>
    </div>
    <div class="isi">
     <%= yield %>
    </div>
    <div class="footer">
  COPYRIGHT © 2016 CODEDOCT.COM ALL RIGHTS RESERVED.
 </div>
  </body>
</html>

Terakhir, tambahkan method current_user jika user sudah login, dengan mengedit file application_controller.rb pada path app/controllers/ menjadi seperti ini,
class ApplicationController < ActionController::Base
   protect_from_forgery with: :exception
   helper_method :current_user
  def hello
  render html: "hallo, dunia"
   end

 def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
 end

 def require_user
  redirect_to '/login' unless current_user
 end
end

Penambahan method current_user ini diletakkan pada application_controller.rb karena file tersebut akan selalu dipanggil pada saat mengakses controller manapun, jadi di controller manapun kita dapat mengakses siapa yang sedang login.

Sehingga tampilan akhirnya akan tampak seperti ini,

  • Pada saat sebelum login tulisan  disudut kanan atas awalnya akan bertuliskan login dan linknya akan menuju pada halaman login,


  • Sedangkan saat sudah login tulisan disudut kanan atas akan bertuliskan email yang sedang login,



===DONE!===

Rails - Authentification (prepare database)


Kembali lagi di Ruby on Rails,

Pada tutorial sebelumnya kita sudah belajar membuat sebuah sistem CRUD (delete). Kali ini kita akan belajar yang agak sedikit rumit yaitu membuat sebuah sistem login dan logout atau biasa disebut sistem authentification.

Tutorial ini akan di sajikan dalam beberapa step karena akan sangat panjang jika hanya dipraktekkan pada satu page tutorial saja. Pada step yang pertama ini akan lebih menitik beratkan pada persiapan database login yang akan digunakan.

Oke langsung saja kita mulai tutorialnya,

Pertama, tambahkan gem bcrypt pada file Gemfile seperti ini,
source 'https://rubygems.org'

gem 'rails',        '5.0.0.1'
gem 'puma',         '3.4.0'
gem 'sass-rails',   '5.0.6'
gem 'uglifier',     '3.0.0'
#gem 'coffee-rails', '4.2.1'
gem 'jquery-rails', '4.1.1'
gem 'turbolinks',   '5.0.1'
gem 'jbuilder',     '2.4.1'

group :development, :test do
  gem 'sqlite3', '1.3.11'
  gem 'byebug',  '9.0.0', platform: :mri
end

group :development do
  gem 'web-console',           '3.1.1'
  gem 'listen',                '3.0.8'
  gem 'spring',                '1.7.2'
  gem 'spring-watcher-listen', '2.0.0'
  gem 'bcrypt',                '3.1.7'
end

group :production do
  gem 'pg', '0.18.4'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
dan jangan lupa untuk mengcompilenya dengan cara ketikkan pada terminal "bundle install"

Selanjutnya, tambahkan dua field baru yaitu email dan password_digest pada file migrate (tanggal_create_users.rb) yang terletak pada path db/migrate/ sehingga code akan tampak seperti ini,
class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
        t.string :first_name
        t.string :last_name
        t.string :nick_name
        t.text :address
        t.integer :phone
        t.string :email
        t.string :password_digest
        t.date :birth_date
        t.timestamps
    end
  end
end

Kemudian, edit pula file seeds.rb pada path db/ untuk menyesuaikan dengan file migrate yang sudah dibuat, sehingga code seedsnya akan tampak seperti ini,
User.create!([
  { first_name: "Monkey", last_name: "D Garp", nick_name: "Garp", address: "East Blue", phone: 8111, email: "monkey@mail.com", password: "password", password_confirmation: "password", birth_date: DateTime.parse("01/01/1991") },
  { first_name: "John", last_name: "Wick", nick_name: "Wick", address: "New York", phone: 8112, email: "jhon@mail.com", password: "password", password_confirmation: "password", birth_date: DateTime.parse("02/02/1992") },
  { first_name: "Dracule", last_name: "Mihawk", nick_name: "Mihawk", address: "West Blue", phone: 8113, email: "dracule@mail.com", password: "password", password_confirmation: "password", birth_date: DateTime.parse("03/03/1993") },
])

Jangan lupa tambahkan aturan penulisan password dengan menambahkan code pada file model user.rb pada path app/models/ edit menjadi seperti ini,
class User < ApplicationRecord
 has_secure_password
end

Setelah itu, buka terminal kembali, dan dan ketikkan code berikut
#roleback atau hapus database
rake db:roleback
#migrate atau create database
rake db:migrate
#seed atau isi field database
rake db:seed

Untuk mengecek databasenya ketikkan pada terminal "rails console" setelah masuk ke sqlnya ketikkan "User.all" maka akan tampil, tampilan seperti ini,


yang berarti migration dan seedernya berhasil karena bertambah dua field baru yaitu email dan password_digest.

Selanjutnya tambahkan permit baru untuk field email dan password dengan edit controller user_controller.rb pada path app/controllers/ menjadi seperti ini,
class UsersController < ApplicationController
 def index
  @users = User.all
 end

 def _signup
  @user = User.new
 end

 def _addUser 
   @user = User.new(user_params) 
   if @user.save
     redirect_to '/login' 
   else 
     redirect_to '/' 
   end 
 end

 def _show
  @user = User.find(params[:id])
 end

 def _edit
  @user = User.find(params[:id])
  if @user.update(user_params)
   redirect_to '/users' 
  else 
   redirect_to '/' 
  end 
 end

 def _delete
  @user = User.find(params[:id])
  if @user.destroy
   redirect_to '/users' 
  else 
   redirect_to '/' 
  end 
 end

 private
  def user_params
   params.require(:user).permit(:first_name, :last_name, :nick_name, :address, :phone, :email, :password)
  end
end

Kemudian edit view file index.html.erb pada path app/views/users/ menjadi seperti ini,
<%= provide(:title, "User") %>
<h1>Table user</h1>
<br>
<table border="1px" width="100%">
 <thead>
  <tr>
   <th>No</th>
   <th>Name</th>
   <th>Nick Name</th>
   <th>Address</th>
   <th>Phone number</th>
   <th>Email</th>
   <th>Birthdate</th>
   <th>Action</th>
  </tr>
 </thead>
 <tbody>
  <% no=1; @users.each do |x| %>
  <% if !x.first_name then x.first_name='' end; if !x.last_name then x.last_name='' end %>
   <tr>
    <td><%= no %></td>
    <td><%= x.first_name+' '+x.last_name %></td>
    <td><%= x.nick_name %></td>
    <td><%= x.address %></td>
    <td><%= x.phone %></td>
    <td><%= x.email %></td>
    <td><%= x.birth_date %></td>
    <td><%= link_to "Edit", user_path(x) %> || <%= link_to 'Delete',  { action: :_delete, id: x.id }, method: :delete, data: { confirm: 'Are you sure?' } %></td>
   </tr>
  <% no+=1; end %>
 </tbody>
</table>

Setelah itu edit pula view _signup.html.erb pada path app/views/users/ menjadi seperti ini,
<%= provide(:title, "Sign Up") %>
<div class="text-center">
 <h1>Sign up</h1>
 <br><br>
 <div class="form-group">
  <%= form_for(@user, url: {action: "_addUser"}, method: "post") do |f| %>
     <%= f.text_field :first_name, :placeholder => "First name", class: 'form-input', required: true %><br>
     <%= f.text_field :last_name, :placeholder => "Last name", class: 'form-input', required: true %><br>
     <%= f.text_field :nick_name, :placeholder => "Nick name", class: 'form-input', required: true %><br>
     <%= f.text_area :address, :placeholder => "Address", class: 'form-input-textarea', required: true %><br>
     <%= f.number_field :phone, :placeholder => "Phone number", class: 'form-input', required: true %><br>
     <%= f.email_field :email, :placeholder => "Email", class: 'form-input', required: true %><br>
     <%= f.password_field :password, :placeholder => "Password", class: 'form-input', required: true %><br>
   <div class="left-float">
    <%= f.submit "Create an account", class: "btn-submit" %>
   </div>
     <div class="right-float">
      <!--input type="button" name="login" value="Login" class="btn-submit"-->
   </div>
  <% end %>
 </div>
</div>
<br>

Terakhir edit view _show.html.erb pada path app/views/users/ menjadi seperti ini,
<%= provide(:title, "Edit") %>
<h1>Edit User</h1>
<br>
<div class="form-group">
 <%= form_for(@user, url: {action: "_edit"}, method: "post") do |f| %>
  <label>First Name</label>
    <%= f.text_field :first_name, :value => @user.first_name, class: 'form-input', required: true %><br>
    <label>Last Name</label>
    <%= f.text_field :last_name, :value => @user.last_name, class: 'form-input', required: true %><br>
    <label>Nick Name</label>
    <%= f.text_field :nick_name, :value => @user.nick_name, class: 'form-input', required: true %><br>
    <label>Address</label>
    <%= f.text_area :address, :value => @user.address, class: 'form-input-textarea', required: true %><br>
    <label>Phone</label>
    <%= f.number_field :phone, :value => @user.phone, class: 'form-input', required: true %><br>
    <%= f.email_field :email, :value => @user.email, class: 'form-input', required: true %><br>
    <%= f.password_field :password, :value => @user.password, class: 'form-input', required: true %><br>
  <%= f.submit "Save", class: "btn-submit" %>  <input type="button" onclick="location.href='/users';" value="Cancel" class="btn-submit" />
 <% end %>
</div>

Sehingga salah satu tampilan viewnya akan berubah seperti ini,


===DONE!===

Rails - CRUD (Delete) database


Akhirnya sampai pada sistem CRUD yang terakhir yaitu delete,

Pada tutorial sebelumnya kita sudah membuat sebuah sistem update, kali ini kita akan membuat sistem CRUD yang berfungsi sebagai delete field tabel database.

Oke langsung saja tutorialnya,,

Pertama, buat route baru untuk sistem delete dengan menambahkan code berikut pada file routes.rb pada path config/
.
.
.
delete 'delete/:id' => 'users#_delete'

Selanjutnya buat controller untuk sistem delete ini dengan menambahkan code berikut pada file users_controller.rb pada path app/controllers/
.
.
.
 def _delete
  @user = User.find(params[:id])
  if @user.destroy
   redirect_to '/users' 
  else 
   redirect_to '/' 
  end 
 end
.
.
.

Kemudian yang terakhir tambahkan link delete pada file index.html.erb yang terletak pada path app/views/users/ dengan menambahkan code berikut pada file tersebut,
<td><%= link_to "Edit", user_path(x) %> || <%= link_to 'Delete',  { action: :_delete, id: x.id }, method: :delete, data: { confirm: 'Are you sure?' } %></td>

Sehingga tampilannya akan tampak seperti ini,


Jika butuh sintax ruby yang lain bisa lihat disini, sintax rails lihat disini.


===DONE!===


Rails - CRUD (Update) database


Melanjutkan tutorial sebelumnya tentang salah satu sistem CRUD yaitu create, kali ini kita akan membuat salah satu sistem CRUD yang lain yaitu update.

Sistem update ini berfungsi untuk, mengubah data field pada suatu tabel database,

Oke langsung saja kita praktekkan tutorialnya,

Pertama, buat terlebih dahulu route untuk sistem update ini dengan menambahkan code berikut pada file routes.rb pada path config/
.
.
.
get 'edit/:id' => 'users#_show', as: :user
post 'edit/:id' => 'users#_edit'

Selanjutnya, buat controller update dengan menambahkan code berikut pada file users_controller.rb pada path app/controllers/

.
.
.
 def _show
  @user = User.find(params[:id])
 end

 def _edit
  @user = User.find(params[:id])
  if @user.update(user_params)
   redirect_to '/users' 
  else 
   redirect_to '/' 
  end 
 end
.
.
.

Kemudian, buat page view untuk sistem update dengan membuat file baru dengan nama _show.html.erb pada path app/views/users/
<%= provide(:title, "Edit") %>
<h1>Edit User</h1>
<br>
<div class="form-group">
 <%= form_for(@user, url: {action: "_edit"}, method: "post") do |f| %>
  <label>First Name</label>
    <%= f.text_field :first_name, :value => @user.first_name, class: 'form-input', required: true %><br>
    <label>Last Name</label>
    <%= f.text_field :last_name, :value => @user.last_name, class: 'form-input', required: true %><br>
    <label>Nick Name</label>
    <%= f.text_field :nick_name, :value => @user.nick_name, class: 'form-input', required: true %><br>
    <label>Address</label>
    <%= f.text_area :address, :value => @user.address, class: 'form-input-textarea', required: true %><br>
    <label>Phone</label>
    <%= f.number_field :phone, :value => @user.phone, class: 'form-input', required: true %><br>
  <%= f.submit "Save", class: "btn-submit" %>  <input type="button" onclick="location.href='/users';" value="Cancel" class="btn-submit" />
 <% end %>
</div>

Terakhir, tambahkan link edit pada page view index.html.erb pada path app/views/user/ dengan mengedit file tersebut menjadi seperti ini,
<%= provide(:title, "User") %>
<h1>Table user</h1>
<br>
<table border="1px" width="100%">
 <thead>
  <tr>
   <th>No</th>
   <th>Name</th>
   <th>Nick Name</th>
   <th>Address</th>
   <th>Phone number</th>
   <th>Birthdate</th>
   <th>Action</th>
  </tr>
 </thead>
 <tbody>
  <% no=1; @users.each do |x| %>
  <% if !x.first_name then x.first_name='' end; if !x.last_name then x.last_name='' end %>
   <tr>
    <td><%= no %></td>
    <td><%= x.first_name+' '+x.last_name %></td>
    <td><%= x.nick_name %></td>
    <td><%= x.address %></td>
    <td><%= x.phone %></td>
    <td><%= x.birth_date %></td>
    <td><%= link_to "Edit", user_path(x) %></td>
   </tr>
  <% no+=1; end %>
 </tbody>
</table>

Sehingga tampilannya akan tampak seperti ini,



Jika butuh sintax ruby yang lain bisa lihat disini, sintax rails lihat disini.


===DONE!===

Rails - CRUD (Create) database


Happy Code,,

Pada tutorial kemarin kita sudah belajar membuat salah satu dari sistem CRUD yaitu read,,

Tutorial kali ini, kita akan kembali membuat salah satu sistem CRUD yaitu create. sistem create ini merupakan sebuah sistem yang digunakan untuk menambahkan suatu field pada tabel database.

Oke, langsung saja kita praktekkan tutorialnya,,

Pertama, buat dulu route yang akan menampilkan halaman dari sistem create ini, dengan mengedit file routes.rb pada path config/ menjadi seperti ini,
Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  # root 'application#hello'
  get 'users' => 'users#index'
  get '' => 'home#index'
  get 'signup' => 'users#_signup'
  post 'signup' => 'users#_addUser'
end

Selanjutnya, tambahkan method _signup dan _addUser pada users_controller.rb yang terletak pada path app/controller/ dengan mengedit menjadi seperti ini,
class UsersController < ApplicationController
 def index
  @users = User.all
 end

 def _signup
  @user = User.new
 end

 def _addUser 
   @user = User.new(user_params) 
   if @user.save
     redirect_to '/users' 
   else 
     redirect_to '/' 
   end 
 end

 private
  def user_params
   params.require(:user).permit(:first_name, :last_name, :nick_name, :address, :phone)
  end
end

Kemudian, ubah sedikit code application.html.erb pada path app/views/layouts/ dengan menambahkan code pada header seperti ini,
.
.
.
 <div class="header">
  <div class="content">
   <div class="left-float">
    <a href="/" class="button-header">Home</a>
    <div class="dropdown">
     <a class="button-header dropbtn" onclick="myFunction()">Table</a>
     <div id="myDropdown" class="dropdown-content">
      <a href="/users">User</a>
      <a href="#">Link 2</a>
      <a href="#">Link 3</a>
     </div>
    </div> 
   </div>
   <div class="right-float">
    <a href="/signup" class="button-header">SignUp</a>
   </div>
  </div>
 </div>
.
.
.

Setelah itu, buat file html baru dengan nama _signup.html.erb pada path app/views/users/ dan tambahkan code berikut,
<%= provide(:title, "Sign Up") %>
<div class="text-center">
 <h1>Sign up</h1>
 <br><br>
 <div class="form-group">
  <%= form_for(@user, url: {action: "_addUser"}, method: "post") do |f| %>
     <%= f.text_field :first_name, :placeholder => "First name", class: 'form-input', required: true %><br>
     <%= f.text_field :last_name, :placeholder => "Last name", class: 'form-input', required: true %><br>
     <%= f.text_field :nick_name, :placeholder => "Nick name", class: 'form-input', required: true %><br>
     <%= f.text_area :address, :placeholder => "Address", class: 'form-input-textarea', required: true %><br>
     <%= f.number_field :phone, :placeholder => "Phone number", class: 'form-input', required: true %><br>
   <div class="left-float">
    <%= f.submit "Create an account", class: "btn-submit" %>
   </div>
     <div class="right-float">
      <!--input type="button" name="login" value="Login" class="btn-submit"-->
   </div>
  <% end %>
 </div>
</div>
<br>

Terakhir edit file users.scss dan home.scss pada path app/assets/stylesheets/ seperti ini,

users.scss
// Place all the styles related to the users controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
.form-group{
 width: 600px;
 display: inline-block;
 .form-input{
  padding:20px;
  width: 100%;
  margin-bottom: 10px;
  margin-top: 5px;
  border-radius: 4px;
  border: 1px solid #ddd;
 }
 .form-input-textarea{
  padding:20px;
  width: 100%;
  margin-bottom: 10px;
  margin-top: 5px;
  height: 100px;
  border-radius: 4px;
  border: 1px solid #ddd;
 }
 .btn-submit{
     background-color: #4CAF50;
     color: white;
     padding: 14px 20px;
     margin: 8px 0;
     border: none;
     border-radius: 4px;
     cursor: pointer;
     &:hover{
      background-color: #45a049;
     }
 }
}

home.scss
// Place all the styles related to the home controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
body{
 margin: 0;
 padding: 0;
}

// Global css
.text-center{
 text-align: center;
}
.left-float{
 float: left;
}
.right-float{
 float: right;
}

.header{
 height: 50px;
 line-height: 50px;
 width: 100%;
 background-color: #1da1f2;
 position:fixed;
 top: 0;
 .content{
  padding: 0 50px;
  .button-header{
   text-decoration: none;
   padding: 15px 20px;
   &:hover{
    opacity: 0.1;
    cursor: pointer;
   }
  }
  .dropdown {
      position: relative;
      display: inline-block;
      .dropdown-content {
       display: none;
       position: absolute;
       background-color: #f9f9f9;
       min-width: 160px;
       overflow: auto;
       box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
       a{
        color: black;
        padding: 6px 16px;
        text-decoration: none;
        display: block;
        &:hover{
         background-color: #f1f1f1
        }
       }
   }
  }
 }
}
.isi{
 padding: 10px 20px;
 border: 1px solid #ddd;
 border-radius: 3px;
 width: 90%;
 margin: 100px auto; 
}
.footer {
 position:fixed;
 left:0px;
 bottom:0px;
 height:50px;
 width:100%;
 background:#fff;
 line-height: 50px;
 text-align: center;
 border-top: 1px solid #ddd;
}

Sehingga hasilnya akan tampak seperti ini,


Jika butuh sintax ruby yang lain bisa lihat disini, sintax rails lihat disini.


===DONE!===


Rails - CRUD (Read) database



Akhirnya sampai juga kita pada sistem CRUD (Create, Read, Update, Delete), pada tutorial kemarin kita sudah membuat sebuah tabel users beserta migration, dan seedernya, kali ini kita akan membuat sebuat sistem yang akan membaca database dari tabel users dan kemudian menampilkannya pada sebuah page.

Oke, langsung saja kita mulai praktek tutorialnya,,

Pertama, edit file controller yang pernah kita buat sebelumnya yaitu users_controller.rb pada path app/controllers/ menjadi seperti ini,
class UsersController < ApplicationController
 def index
  @users = User.all
 end
end

Kemudian, tambahkan sebuah link yang menuju route user dengan, mengedit file application.html.erb pada path app/views/layouts/ menjadi seperti ini,
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Page</title>
    <%= csrf_meta_tags %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <div class="header">
      <div class="content">
        <a href="/" class="button-header">Home</a>
        <div class="dropdown">
          <a class="button-header dropbtn" onclick="myFunction()">Table</a>
          <div id="myDropdown" class="dropdown-content">
            <a href="/users">User</a>
            <a href="#">Link 2</a>
            <a href="#">Link 3</a>
          </div>
        </div>
      </div>
    </div>

    <div class="isi">
      <%= yield %>
    </div>

    <div class="footer">
      COPYRIGHT © 2016 CODEDOCT.COM ALL RIGHTS RESERVED.
    </div>
  </body>
</html>

Terakhir, buat sebuah page untuk menampilkan isi field tabel user dengan mengedit file index.html.erb pada path app/views/users/ menjadi seperti ini,
<%= provide(:title, "User") %>
<h1>Table User</h1>
<br>
<table border="1px" width="100%">
 <thead>
  <tr>
   <th>No</th>
   <th>Name</th>
   <th>Nick Name</th>
   <th>Address</th>
   <th>Phone number</th>
   <th>Birthdate</th>
  </tr>
 </thead>
 <tbody>
  <% no=1; @users.each do |x| %>
  <% if !x.first_name then x.first_name='' end; if !x.last_name then x.last_name='' end %>
   <tr>
    <td><%= no %></td>
    <td><%= x.first_name+' '+x.last_name %></td>
    <td><%= x.nick_name %></td>
    <td><%= x.address %></td>
    <td><%= x.phone %></td>
    <td><%= x.birth_date %></td>
   </tr>
  <% no+=1; end %>
 </tbody>
</table>

Sehingga hasilnya akan tampak seperti ini,


Untuk syntax Rails yang lain bisa lihat disini, dan syntax Ruby bisa dilihat disini.


===DONE!===


Why?

1. Pada tabel terlihat kolom phone number tidak diawali dengan angka 0 hal ini dikarenakan pada file seeder, jika kita menggunakan angka 0 pada awal integer maka akan terjadi error seperti ini saat akan melakukan rake db:seed,


Jika anda tetap ingin menggunakan angka 0 maka ubah saja format migration phone number dari integer menjadi string dan pada pada seeder juga masukkan variabel string. Untuk mengubah migration dan seeder bisa lihat disini

Rails - Create table, migration, and seeder


Pada tutorial kemarin kita sudah membuat UI atau home page pada project Rails kita, pada tutorial kali ini akan membahas tentang create table, migration, dan seeder pada Ruby on Rails.

Default dari database yang digunakan pada project rails yang sedang kita buat saat ini adalah sqlite3, dengan nama development.sqlite3 yang terletak pada path db/

Oke, langsung saja kita praktekkan tutorialnya,

Pertama buat dulu modelnya pada rails, dalam hal ini kita akan membuat table users, masuk ke folder project dan ketikkan "rails generate model user" pada terminal seperti ini,


Jika sudah, maka secara otomatis file migration juga akan terbentuk dengan nama timestamp_create_users.rb pada path db/migrate/ edit file tersebut menjadi seperti ini,
class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
     t.string :first_name
     t.string :last_name
     t.string :nick_name
     t.text :address
     t.integer :phone
     t.date :birth_date
     t.timestamps
    end
  end
end

Setelah itu, isi table users dengan beberapa field sesuai dengan requirement pada file migration yang sudah kita buat tadi dengan cara mengedit file seeds.rb pada path db/ menjadi seperti ini,
# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup).
#
# Examples:
#
#   movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
#   Character.create(name: 'Luke', movie: movies.first)
User.create!([
  { first_name: "Monkey", last_name: "D Garp", nick_name: "Garp", address: "East Blue", phone: 8111, birth_date: DateTime.parse("01/01/1991") },
  { first_name: "John", last_name: "Wick", nick_name: "Wick", address: "New York", phone: 8112, birth_date: DateTime.parse("02/02/1992") },
  { first_name: "Dracule", last_name: "Mihawk", nick_name: "Mihawk", address: "West Blue", phone: 8113, birth_date: DateTime.parse("03/03/1993") },
])

Jika sudah, untuk melakukan migrate dan seed database pada terminal ketikkan code berikut,
rake db:migrate
rake db:seed

Sehingga akan tampak seperti gambar dibawah ini,


Jika terjadi error, lihat dibawah..

Oke, table users dan isinya sudah terbentuk, untuk menge-check-nya dapat dilakukan dengan cara berikut,
//open file
sqlite3 db/development.sqlite3

//show all table
sqlite>.tables

//show all field table
sqlite>select * from users;

//back to terminal
ctrl+c(2x type)

Jangan lupa untuk menggunakan semicolon(;) pada setiap akhir code sql.
Sehingga akan tampak seperti ini,


Untuk syntax rails yang lain bisa lihat disini, syntax ruby bisa lihat disini,


===DONE!===


why?

1. Error pada saat rake db:migrate


Ketikkan code berikut pada terminal,
gem install rubygems-bundler
gem regenerate_binstubs

Syntax - Syntax rails


Operation
# new rails
$ rails new MySite

#bundling
$bundle install

#running server
rails server

#create new controller
rails generate controller Pages
#for edit, on path: routes->controller->page

#create new model
rails generate model Message
#file in db/migrate

#migration
rake db:migrate

#seeder
rake db:seed

HTML
#show content model
<% @messages.each do |t| %>
 <h1>name: <%= t.name %></h1><br>
 description: <%= t.description %>
<% end %>

#show image
<%= image_tag t.image %>

#show link
<%= link_to "Learn more", tag_path(t) %>

Controller
#controller
def messages
 #show all field database
 @messages = Message.all

 #show field database with id
 def show
  @tag = Tag.find(params[:id])
  @destinations = @tag.destinations
 end

 #edit
 def update
  @destination = Destination.find(params[:id])
  if @destination.update(destination_params)
   redirect_to @destination
  else
   render 'edit'
  end
 end
 private 
    def destination_params 
      params.require(:destination).permit(:name, :description) 
    end
end

Model
#model
class Tag < ActiveRecord::Base
 has_many :destinations
 belongs_to :tag
end

Routes
#routes
Rails.application.routes.draw do
 get '/tags' => 'tags#index'
 post '/tags/create' => 'tags#create'
 get '/tags/:id' => 'tags#show', as: :tag
end

Seeder
#db:migrate
class CreateDestinations < ActiveRecord::Migration
  def change
    create_table :destinations do |t|
      t.string :name
      t.string :image
      t.string :description
      t.references :tag
      t.timestamps
    end
  end
end

Rails - Make UI (landing page home) with javascript, erb, and sass


Melanjutkan tutorial kemarin tentang route, controller, view, tutorial kali ini akan membahas tentang membuat sebuah home page website pada Rails dengan menggunakan javascript, erb, dan sass.

Oke yang pertama silahkan generate terlebih dahulu controller home, caranya dengan mengetikkan code pada terminal ubuntu seperti ini,


Selanjutnya buat route baru untuk halaman home dengan mengedit file routes.rb pada path config/ menjadi seperti ini,
Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  # root 'application#hello'
  get 'users' => 'users#index'
  get '' => 'home#index'
end

Kemudian, buat controller baru untuk menampilkan halaman index home dengan mengedit file home_controller.rb pada path app/controllers/ menjadi seperti ini,
class HomeController < ApplicationController
 def index

 end
end

Setelah itu edit file application.html.erb pada path app/views/layouts/ menjadi seperti ini,
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Page</title>
    <%= csrf_meta_tags %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <div class="header">
      <div class="content">
        <a href="/" class="button-header">Home</a>
        <div class="dropdown">
          <a class="button-header dropbtn" onclick="myFunction()">Table</a>
          <div id="myDropdown" class="dropdown-content">
            <a href="#">Link 1</a>
            <a href="#">Link 2</a>
            <a href="#">Link 3</a>
          </div>
        </div>
      </div>
    </div>
    <div class="isi">
      <%= yield %>
    </div>
    <div class="footer">
      COPYRIGHT © 2016 CODEDOCT.COM ALL RIGHTS RESERVED.
    </div>
  </body>
</html>

Selanjutnya, edit file home.scss pada path app/assets/stylesheets/ menjadi seperti ini,
// Place all the styles related to the home controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
body{
 margin: 0;
 padding: 0;
}

// Global css
.text-center{
 text-align: center;
}

.header{
 height: 50px;
 line-height: 50px;
 width: 100%;
 background-color: #1da1f2;
 position:fixed;
 top: 0;
 .content{
  padding: 0 50px;
  .button-header{
   text-decoration: none;
   padding: 15px 20px;
   &:hover{
    opacity: 0.1;
    cursor: pointer;
   }
  }
  .dropdown {
      position: relative;
      display: inline-block;
      .dropdown-content {
       display: none;
       position: absolute;
       background-color: #f9f9f9;
       min-width: 160px;
       overflow: auto;
       box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
       a{
        color: black;
        padding: 6px 16px;
        text-decoration: none;
        display: block;
        &:hover{
         background-color: #f1f1f1
        }
       }
   }
  }
 }
}
.isi{
 padding: 10px 20px;
 border: 1px solid #ddd;
 border-radius: 3px;
 width: 90%;
 margin: 100px auto; 
}
.footer {
 position:fixed;
 left:0px;
 bottom:0px;
 height:50px;
 width:100%;
 background:#fff;
 line-height: 50px;
 text-align: center;
 border-top: 1px solid #ddd;
}

Edit pula file home.js pada path app/assets/javascripts/ menjadi seperti ini,
// Place all the behaviors and hooks related to the matching controller here.
// All this logic will automatically be available in application.js.
function myFunction() {
  $('.dropdown-content').toggle('slow');
}

$(document).mouseup(function (e)
{
    var container = $('.dropdown-content');

    if (!container.is(e.target) // if the target of the click isn't the container...
        && container.has(e.target).length === 0) // ... nor a descendant of the container
    {
        container.hide();
    }
});

Terakhir buat file index.html.erb pada path app/views/home/ kemudian isikan code berikut ini,
<%= provide(:title, "Home") %>
<h1 class="text-center">Welcome to my ruby website</h1>
<br>
<p>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
  tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
  quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
  consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
  cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
  proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>

Sehingga hasilnya akan tampak seperti ini,



===DONE!===

Rails - routes, controller, view

 

Kembali lagi ke Ruby on Rails,..!!!

Karena tutorial PHP dan Laravel sudah sangat jauh, maka mulai saat ini codedoct akan lebih fokus pada tutorial ruby on rails,,

Pada tutorial sebelumnya kita sudah membuat sebuah project Rails dengan nama project-blog-ruby, kali ini pembelajaran akan lebih menitik beratkan pada pemahaman tentang routes, controller, dan view dari framework Rails ini.

Ok, jalankan terlebih dahulu project-blog-ruby dengan mengetikkan code rails server pada directory project-blog-ruby sehingga akan terlihat seperti ini,


Selanjutnya buat controller baru dengan nama Users dengan cara seperti ini,


Buka file routes.rb pada path config/ dan edit menjadi seperti ini,
Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root 'application#hello'
  get 'users' => 'users#index'
end

Kemudian, setelah generate controller, rails akan secara otomatis membuat file controller baru dengan nama users_controller.rb pada path app/controllers/ dan edit menjadi seperti ini,
class UsersController < ApplicationController
 def index
  @nama = ['Jhon', 'Garp', 'Tirex']
 end
end

Setelah itu, buka file application.html.erb pada path app/views/layouts/ file ini akan kita jadikan sebagai file layout master, edit menjadi seperti ini..
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Page</title>
    <%= csrf_meta_tags %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

Terakhir buat file view baru dengan nama index.html.erb pada path app/views/users dan isikan code berikut,
<%= provide(:title, "User") %>
<div class="test">hai</div>
<% @nama.each do |x| %>
 <h4><%= x %></h4>
<% end %>

Jangan lupa untuk menambahkan css, anda bisa menambahkannya pada file users.scss yang terletak pada path app/assets/stylesheets/ file ini secara otomatis dibuat saat kita generate controller, edit file ini menjadi seperti ini,
// Place all the styles related to the Users controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
.test{
 color: green;
}
lain halnya pada Laravel, pada Rails anda tidak perlu mengcompile file scss ini menjadi file css,

Sehingga hasilnya akan tampak seperti ini,



===DONE!===

Rails - Create project

Akhirnya punya waktu juga untuk tutorial Ruby on Rails,,

Sebelumya kita sudah menginstall ruby dan rails pada ubuntu kita selanjutnya pada tutrial kali ini kita akan membuat sebuah project awal dari Ruby on Rails.

Jika anda belum menginstall Ruby pada Ubuntu, silahkan lihat disini.
Jika anda belum menginstall Rails pada Ubuntu, silahkan lihat disini.

Oke langsung saja kita praktekkan tutorialnya,

Pertama, buat dulu folder project kita dalam hal ini saya akan memberi nama project dengan nama project-blog-ruby pada path /var/www/html/ caranya seperti ini,
$ cd /var/www/html/project-blog-ruby

$ rails _5.0.0.1_ new .

Selanjutnya edit gemfile menjadi seperti ini,
source 'https://rubygems.org'

gem 'rails',        '5.0.0.1'
gem 'puma',         '3.4.0'
gem 'sass-rails',   '5.0.6'
gem 'uglifier',     '3.0.0'
#gem 'coffee-rails', '4.2.1'
gem 'jquery-rails', '4.1.1'
gem 'turbolinks',   '5.0.1'
gem 'jbuilder',     '2.4.1'

group :development, :test do
  gem 'sqlite3', '1.3.11'
  gem 'byebug',  '9.0.0', platform: :mri
end

group :development do
  gem 'web-console',           '3.1.1'
  gem 'listen',                '3.0.8'
  gem 'spring',                '1.7.2'
  gem 'spring-watcher-listen', '2.0.0'
end

group :production do
  gem 'pg', '0.18.4'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

Kemudian, install project baru tersebut dengan code ini,
$ bundle install --without production

Setelah itu edit file routes.rb pada path config/ menjadi seperti ini,
Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root 'application#hello'
end

Dan edit juga file application_controller.rb menjadi seperti ini,
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def hello
 render html: "hallo, dunia"
  end
end

Terakhir jalankan local server rails dengan code,
//jangan lupa masuk ke path project terlebih dahulu
$ cd /var/www/html/project-blog-ruby

$ rails server


Buka url localhost:3000 dan hasilnya akan terlihat seperti ini.



===DONE!===


WHY?


Versi rails anda tidak support silahkan upgrade rails dengan code seperti ini


Coba lagi, hasilnya seperti ini,


Rails - Install Rails on Ubuntu


Oke melanjutkan artikel sebelumnya, kali ini kita akan menginstall Rails..

Rails merupakan sebuah framework pada Ruby yang akan memudahkan anda membuat sebuah website dengan menggunakan bahasa Ruby yang sangat elegan..

Kebanyakan orang yang menguasai Ruby on Rails adalah programmer yang sudah bisa dikatakan "PRO" dikarenakan kebanyakan  dari mereka yang jago Ruby pasti sebelumnya sudah pernah belajar PHP dan membandingkan kedua bahasa pemrogramman tersebut. Tapi tidak sedikit juga programmer yang langsung mempelajari Ruby tanpa mengerti PHP hehe..

Tentu saja hal itu sangat disayangkan  karena PHP dengan penggemar yang sangat banyak diseluruh dunia juga merupakan bahasa yang elegan dan penuh dengan "kebebasan" => "U Can Make Anything With PHP" haha..

Oke langsung saja kita install Railsnya, Here we go..

Jangan lupa install Ruby terlebih dahulu,

Dalam pengembangannya nanti Rails sangat bergantung pada JavaScript oleh sebab itu kita install terlebih dahulu NodeJS
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs

Kemudian Install Rails
gem install rails -v 5.0.0.1

Pastikan kembali rbenv Ruby dapat eksekusi
rbenv rehash

Check installation
rails -v

Sehingga tampilannya akan terlihat seperti ini


===DONE!===