Membuat database untuk mengatur user

Dalam program yang akan kita buat membutuhkan penyimpanan data yang harus disimpan dalam bentuk suatu database, tabel pertama yang akan kita buat adalah tabel untuk user, sehingga nantinya user bisa melakukan register dan login sebelum menyampaikan ide-ide miliknya.

Membuat user

Membuat model user

  • klik start, ketik command , klik command prompt with ruby
  • cd intomyidea
  • membuat model user, ketik
    • rails generate model User
    • perlu diingat nama model gunakan huruf beser
  • jalankan program sublime.

    • pilih menu file, open folder dan pilih c:\sites\intomyidea
    • pada kotak browser di sebelah kiri buka folder db\migrate\
    • pilih file .... create_user.rb
    • hapus seluruh isinya dan ganti dengan kode berikut:
      class CreateUsers < ActiveRecord::Migration[5.0]
        def change
          create_table :users do |t|
            t.string :username, unique: true
            t.string :password_digest
            t.string :email, unique: true
            t.string :role, default: "guest"
            t.string :password_reset_token
            t.string :password_reset_sent_at
            t.timestamps
          end
          add_index "users", ["username"], :name => "index_users_on_username", :unique => true
          add_index "users", ["email"], :name => "index_users_on_email", :unique => true
        end
      end
    
    • simpan dengan ctrl + S
  • kembali ke command prompt dan buat tabel user dengan perintah

    • rake db:migrate

Penjelasan tipe data yang ada di dalam ruby on rails

  • huruf
    • string , tipe data huruf yang terbatas sampai 255 karakter
    • text, tipe data yang bisa menampung sampai 65535 karakter
  • angka
    • integer, angka bilangan bulat
    • decimal, angka yang bisa mengandung pecahan
  • tanggal dan waktu
    • date, data tanggal
    • time, data waktu
    • datetime, data tanggal dan waktu
    • timestamp, special yang digunakan oleh sistem dibuat oleh sistem secara otomatis agar saat suatu record dibuat dan diupdate kita bisa mengetahui tepat tanggalnya, jadi ada 2 field yang dibuat yaitu field created_at dan updated_at
  • logika
    • boolean, data yang hanya bisa diisi true atau false
  • lain-lain
    • reference, bila kita nanti membuat tabel yang kita buat memiliki hubungan dengan tabel lain, misalnya tabel user dan tabel gambar, dimana 1 user bisa memiliki beberapa gambar, maka di tabel gambar harus diberi kolom t.references "user", index: true
    • binary, bila kita ingin menyimpan data dengan tipe film, gambar atau audio, tapi umumnya sekarang file seperti ini nama filenya saja yang didata tapi filenya tidak dimasukka ke dalam database
  • setting tambahan
    • default, data awal yang akan diisi oleh sistem secara otomatis
    • precision dan scale, untuk membatasi digit dalam decimal, misalnya :precision => 12, :scale => 2, default: 0, berarti data menggunakan 12 digit dengan 2 pecahan dan nilai defaultnya adalah 0
    • unique: true, artinya data di kolom ini tidak boleh ada yang sama persis isinya
    • null: false, artinya data di kolom ini harus diisi
  • sistem pemberian nama menggunakan underscore bila ada 2 kata atau lebih.

Membuat aturan pada model

  • pada sublime, buka file app/models/user.rb
  • hapus semua isinya dan ganti dengan kode berikut:
    class User < ApplicationRecord
      # secure password
      has_secure_password

      # validation
      validates :username, 
        :presence => { message: 'harus ada'},
        uniqueness: { case_sensitive: false , message: 'sudah ada, Masukkan username lain'},
        length: { in: 4..30 , message: 'minimal 4 huruf dan maximal 30' },
        format: { with: /\A[a-zA-Z0-9_\-]+\z/, message: 'Tidak boleh ada spasi, hanya boleh huruf dan angka'}

      validates :password, 
        :presence => true,
        :confirmation => true,
        :length => {:within => 8..40, message: 'harus antara 8 - 40 karakter'},
        :on => :create

      validates :email, 
        :presence => { message: 'harus ada'},
        uniqueness: { case_sensitive: false , message: 'sudah ada, Masukkan email lain'}
    end

menambahkan paket program untuk mempermudah membuat program

  • pada sublime, buka file Gemfile
    • kalau anda tidak bisa menemukan tekan ctrl + t, kemudian ketik Gemfile
  • hapus semua isinya dan ganti dengan perintah berikut:
source 'https://rubygems.org'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.0.1'
# Use postgresql as the database for Active Record
gem 'pg', '~> 0.18'
# Use Puma as the app server
gem 'puma', '~> 3.0'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
gem 'jquery-turbolinks'
gem 'jquery-ui-rails', '~> 4.2.1'

# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
gem 'sdoc', '~> 0.4.0', group: :doc

# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

group :development, :test do
  gem 'better_errors'      # for debugging
  gem 'binding_of_caller'  # for debugging
  gem 'meta_request'       # for debugging  
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platform: :mri
end

group :development do
  # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
  gem 'web-console', '>= 3.3.0'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
# Use ActiveModel has_secure_password
gem 'bcrypt', '~> 3.1.7'

# use bootstrap
gem 'bootstrap-sass'

# for paginate paginate
gem 'will_paginate'

# for advance search form
gem 'ransack'

# for authorization 
gem 'cancancan'
  • buka command prompt, dan ketik
    • bundle install
    • tunggu sampai selesai terkadang sekitar 10 menit karena harus melakukan download semua paket program
    • koreksi program bcrypt
    • jalankan perintah gem uninstall bcrypt
    • jalankan perintah gem install bcrypt --platform=ruby

Melakukan pengecekan pada model

  • suatu data sebelum disimpan di dalam database sebaiknya dilakukan verifikasi terlebih dahulu, misalnya username harus ada, password minimal 8 huruf, password dan password confirmation harus sama, email harus ditulis dalam format yang benar.
  • semua pengecekan ini dapat dilakukan pada langkah bagian ini
  • buka command prompt, dan masuk ke folder intomyidea
    • buka rails console dengan mengetikkan rails c
    o1 = User.new
    o1.username = "Bud"
    o1.password = "jakarta"
    o1.password_confirmation = "jakarta"
    o1.save
    o1.valid?
    o1.errors.messages
    o1.username = "budi"
    o1.password = "Jakarta700"
    o1.password_confirmation = "Jakarta700"
    o1.email = "budi@gmail.com"
    o1.valid?
    o1.save
  • Apabila di console anda berhasil menyimpan user yang pertama, maka selamat anda telah berhasil menyelesaikan topik ini dengan baik.