railsでtodoアプリを作る

環境構築

sudo apt-get install rbenv ruby-build ruby-dev
rbenv install --list
rbenv install 2.2.3
rbenv global 2.2.3
sudo gem update --system
sudo gem install rails

プロジェクトの新規作成

# bundleはあとからinstallしないとsystem grobalな場所へパッケージがインストールされてしまう
rails new todoapp --skip-bundle
cd todoapp
bundle install --path=vendor/bundle

Rubymineの場合、gemを認識させるためにGUIからbundle installしないといけない

[Tool]>[Bundler]>[Install]を押す

scaffoldでMVC作成

ユーザーモデルはdeviseパッケージで作成

rails generate scaffold task user_id:integer title:string content:string

create database

rake db:create

migrate table

rake db:migrate

install devise package

deviseパッケージ用いてユーザー認証機能をつける

Gemfileに追記

gem 'devise'

deviseのインストール

rails generate devise:install

config/environments/development.rbに追記

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

homeコントローラのindexメソッドを作成

rails generate controller home index

config/routes.rbに追記

Rails.application.routes.draw do
  root to: "home#index"  # 追記
  get 'home/index'  # rails g controllerで作られた
  (省略)
end

app/view/layouts/application.html.erbのbodyを以下のようにする。サインインリンクの作成とエラーメッセージの表示タグをつけている

<body>
  <% if user_signed_in? %>
    Logged in as <strong><%= current_user.email %></strong>.
    <%= link_to 'Edit profile', edit_user_registration_path, :class => 'navbar-link' %> |
    <%= link_to "Logout", destroy_user_session_path, method: :delete, :class => 'navbar-link'  %>
  <% else %>
    <%= link_to "Sign up", new_user_registration_path, :class => 'navbar-link'  %> |
    <%= link_to "Login", new_user_session_path, :class => 'navbar-link'  %>
  <% end %>
  <% if notice %>
    <p class="notice"><%= notice %></p>
  <% elsif alert %>
    <p class="alert"><%= alert %></p>
  <% end %>
  <%= yield %>
</body>

Userモデルの作成

rails generate devise User

viewの生成

rails generate devise:views users

config/initializers/devise.rbに追記

config.scoped_views = true

ログインしているユーザーによってtasks_controllerを制御する

tasks_controller.rbを以下のように編集

class直下にbefore_actionをいれてtaskcontroller全体の操作をログインしていないとダメにする

before_action :authenticate_user!

indexメソッドでログインしているユーザーIDのタスクのみ表示するようにする

def index
  @tasks = Task.where(user_id:current_user.id)
end

createメソッドでタスク登録時に登録するタスクのuseridをログイン中のものとする

def create
  @task = Task.new(task_params)
  //ここから
  user_id = current_user.id
  @task.user_id = user_id
  //ここまで
  respond_to do |format|
    if @task.save
      format.html { redirect_to @task, notice: 'Task was successfully created.' }
      format.json { render :show, status: :created, location: @task }
    else
      format.html { render :new }
      format.json { render json: @task.errors, status: :unprocessable_entity }
    end
  end
end

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください