User dapat mulai membuat ide

setelah user berhasil melakukan login maka barulah kita mulai tujuan utama dari aplikasi ini yaitu user dapat mulai mengirimkan ide-idenya, untuk praktek ini akan kita gabungkan mulai dari langkah membuat model, membuat controller, mengatur tampilan di view dan mengatur link-link utama, harus dipastikan pula hanya user yang telah login yang dapat membuat ide baru

Membuat idea

Membuat model idea

  • klik start, ketik command , klik command prompt with ruby
  • cd intomyidea
  • membuat model idea, ketik
    • rails generate model Idea
    • 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_ideas.rb
    • hapus seluruh isinya dan ganti dengan kode berikut:
class CreateIdeas < ActiveRecord::Migration
  def change
    create_table :ideas do |t|
      t.string :title
      t.text   :notes
      t.references :user, index: true
      t.timestamps null: false
    end
    add_index :ideas, :title
    add_index :ideas, :notes
  end
end
  • simpan dengan ctrl + S
    • kembali ke command prompt dan buat tabel idea dengan perintah
  • rake db:migrate

penjelasan tabel ide dan langkah pertama dalam membuat One to Many relationship

  • seperti dijelaskan pada modul 2 di pelajaran ini, di dalam tabel idea akan hanya ada kolom judul dan notes dimana judul digunakan untuk memasukan judul sedangkan notes digunakan untuk memasukkan detil ide yang diberikan
  • reference user ini adalah hal baru dimana kita akan membuat suatu relation-ship antar tabel dimana hubungan antara tabel user dan tabel ide adalah "One To Many", di mana satu user bisa memiliki beberapa ide
  • untuk mewujudkan suatu hubungan "One to Many" maka langkah pertama adalah memberikan 1 kolom dengan tipe reference pada tabel ide

langkah 2: memberikan catatan pada model user dan idea

  • buka tabel user di /app/models/user.rb
    • tambahkan kalimat berikut dibawah tulisan class
  has_many :ideas
  • buka tabel user di /app/models/idea.rb
    • hapus semua isinya dan ganti dengan tulisan berikut
class Idea < ActiveRecord::Base
# relation
  belongs_to :user

# validation
  validates :title, 
    :presence => { message: 'harus ada'},
    length: { in: 4..100 , message: 'minimal 4 huruf dan maximal 100' }
end

membuat Controller idea

  • kembali ke command prompt with ruby
  • pastikan berada di dalam folder intomyidea
  • membuat controller idea, ketik
    rails generate controller ideas new create index show edit update destroy
  • buka file app/controllers/ideas_controller.rb
    • hapus seluruh isinya dan lakukan copy-paste blok program dibawah ini
  class ideasController < ApplicationController

    def new
      @idea = idea.new
    end

    def create
      @idea = idea.new(idea_params)
      @idea.user = current_user
      if @idea.save
        flash[:success] = 'Proses pendaftaran sukses'
        redirect_to ideas_path
      else
        render 'new'
      end
    end

    def show
      @idea = idea.find(params[:id])
    end

    def index
      @search = idea.search(params[:q])
      @ideas = @search.result.order('created_at DESC').paginate(page:params[:page],per_page:10)
    end

    def edit
      @idea = idea.find(params[:id])
    end

    def update
      @idea = idea.find(params[:id])
      if @idea.update_attributes(idea_params)
        flash[:success] = 'Perubahaan anda berhasil disimpan'
        redirect_to ideas_path
      else
        flash[:error] = @idea.errors.full_messages[0]
        redirect_to edit_idea_path
      end
    end

    def destroy
      @idea = idea.find(params[:id])
      @idea.destroy
      flash[:success] = 'Data berhasil dihapus'
      redirect_to ideas_path    
    end

  private

    def idea_params
      params.require(:idea).permit(
        :title, 
        :notes, 
        :user_id
        )
    end

  end

mengubah routes

  • buka file /config/routes.rb
    • tambahkan dibawah tulisan resources ideas
  resources :ideas

membuat tampilan untuk memasukkan data idea

  • buka file app/views/ideas/new.html.erb
    • hapus seluruh isinya dan lakukan copy-paste blok program dibawah ini
  <% if logged_in? %>
    <%= render 'idea_form' %>
  <% else %>
    <%= flash[:danger] = 'maaf anda harus login dulu' %>
  <% end %>

membuat file partial form idea

  • buat file baru dengan menekan ctrl + n
  • tekan ctrl + s dan simpan di app/views/ideas/_idea_form.html.erb
    • lakukan copy-paste blok program dibawah ini
<%= form_for @idea do |f| %>
  <%= render 'common/form_errors', object: @idea %>

  <h3>
    <%= f.label :title, "Judul" %><br>
    <%= f.text_field :title, :size => 50 %>
  </h3>

  <h3>
    <%= f.label :notes, "Penjelasan detil" %><br>
    <%= f.text_area :notes, :rows => 4, :cols => 50 %>
  </h3>

  <%= f.submit "Submit", class: "btn btn-info login-box-button" %>
<% end %>

membuat tampilan seluruh idea

  • pada sublime, buka file app/views/ideas/index.html.erb
    • hapus isinya dan ganti dengan ketikan berikut
<% if @ideas.any? %>
     <table class="table table-striped">
      <thead>
        <tr>
          <th><%= "User" %></th>
          <th><%= "Idea" %></th>
          <th><%= "Detail" %></th>
          <th> </th>
        </tr>
      </thead>
      <tbody>
          <%= render @ideas %>
      </tbody>
    </table>
  <div  class="digg_pagination">
      <%= will_paginate %>
  </div>
<% else %>
  <p>Maaf, Tidak ada data idea </p>
<% end %>
  • pada program diatas arti kata-kata render @ideas
  • karena itu tekan Ctrl + N untuk membuat dokumen baru,
    • tekan Ctrl + S, simpan di folder app/views/ideas/ _idea.html.erb
    • (awas jangan lupa tanda underscore yang ada di awal)
  • lakukan copy, paste pada ketikan dibawah ini.
  <tr>
    <td><%= idea.user.username %></td>   
    <td><%= idea.title %></td>
    <td><%= idea.notes %></td>
  </tr>

menambahkan link untuk membuat ide baru dan menampilkan semua ide

  • buka file app/views/layouts/application.html.erb
    • sisipkan perintah ini dibawah pilihan menu change password
  <li><%= link_to "New idea", new_idea_path %></li>
  • buka file config/routes.rb
    • ubah baris root_path menjadi seperti berikut
  root to: 'ideas#index'
  • simpan dengan Ctrl + S, dan buka browser, serta ketik localhost:3000
    • lakukan login
    • setelah login, cobalah untuk membuat 2 ide baru