ギークなエンジニアを目指す男

基幹系SIerがWeb系とかネイティブ系の知識を蓄えようとするブログ

久しぶりの投稿です

8月以来の投稿です。

最近Railsには一切触れておらず。。。

言い訳ですが、仕事が忙しかった + 情報技術者試験の勉強をしていました。

仕事は無事に9月にC.Oを迎え、順調に稼働しております。

情報技術者試験はネットワークスペシャリスト試験を受験してきました。

応用情報技術者試験に合格してから半年ですが、どうもネットワークの知識が薄く。。。

どうせ勉強するなら、目標があったほうがいいね!という事で、受験しました。

自己採点の結果、午前2は8割弱の得点でまぁまぁでしたが、

午後はあまり自信がないです。。。

受かってることを祈ります。

さて、今日からRailsの勉強を再開しようと思うのですが、
お世話になっていたドットインストールさんに新しいRailsのバージョンの動画が...!!

これは再開の時期としては最高(?)と思い立ち、Railsの勉強再開します。

ほぼ1からの再開となるため、これからRails勉強している方の一助になれればと思います。

Ruby on railsでタスクアプリを作成してみる~モデルの追加~

f:id:taxa_program:20170724224720p:plain

今日はモデルの追加を行います。

前回から少し進んでおりますので、途中部分はドットインストールを参照下さい。

新規モデル追加

作成しているタスクアプリも終盤(?)にさしかかって来ました。

プロジェクトの追加、編集、削除は実装できたので、
プロジェクト単位にタスクを登録できるようにしていこうと思います。

現在の画面はこんな感じです。

f:id:taxa_program:20170805121131p:plain

プロジェクトをクリックすると、詳細画面に遷移しますが、
この中でタスク表示等していきたいと思います。

下記コマンドでモデルの追加を行います。

$ rails g model Task title done:boolean project:references

>      invoke  active_record
>      create    db/migrate/20170805031316_create_tasks.rb
>      create    app/models/task.rb
>      invoke    test_unit
>      create      test/models/task_test.rb
>      create      test/fixtures/tasks.yml

Taskというモデルを、Title, done という項目を持たせて作成します。
また、projectのモデルを参照するように宣言しています。

モデルへのデフォルト値設定

作成した done はboolean型で宣言したので、デフォルト値を設定したいです。 taskapp/db/migrate/20170805031316_create_tasks.rb

class CreateTasks < ActiveRecord::Migration[5.1]
  def change
    create_table :tasks do |t|
      t.string :title
      t.boolean :done, default: false
      t.references :project, foreign_key: true

      t.timestamps
    end
  end
end

「default: false」と追記することで、新規登録時には初期値としてfalseが設定されます。

モデルを元にDBにテーブルを作成

あとはおなじみのコマンドで、作成したモデルの内容をDBに反映させます。

$ rake db:migrate

migrateの説明はここにまとめています。

taxa-program.hatenablog.com

コントローラの作成

続いてTaskのコントローラの作成です。

$ rails g controller Tasks

この辺りはもう慣れて来ました。

TaskとProjectの関連付け

最後にtaskとprojectの紐付けを行います。

taskapp/app/models/project.rb

class Project < ApplicationRecord
  # projectが1に対して、taskは複数紐づく
  has_many :tasks

  # エラー条件を設定する
  validates :title,
  presence: { message: "入力してください" },
  length: { minimum: 3, message: "短すぎます"}
end

これで関連付けができました。

Ruby on rails migrate(マイグレーション)とは

f:id:taxa_program:20170805122956g:plain

マイグレーションとは

マイグレーションとは、「移動」「移入」「移住」といった意味をもつ言葉です。
Ruby on Railsからデータベース内にテーブルの元を移入するためのもの、といった意味みたい。

マイグレーション機能をひと言で説明すると、
SQLを書くことなくRubyでデータベース内にテーブルを作成することができる機能」
です。

SQLを書く必要がない理由は、Ruby on Rails内のActiveRecordという機能が
RubySQLに自動翻訳することができるためです。
その仕組みを利用すれば、Rubyが記載された所定のファイルを使い
翻訳処理を経由してSQLでデータベース操作ができます。

$ bin/rake db:migrate

上記コマンドを実行することにより、RubySQLに翻訳されて、
データベースに自動接続します。そして、テーブル作成のSQLを自動実行し、
正常に作成されたか否かの結果を表示します。
なお、一度実行対象になって正常に実行されたマイグレーションファイルは、
実行対象から除外されます。まだ実行されていないファイルのみが対象になります。

Ruby on railsでタスクアプリを作成してみる~新規プロジェクトを追加~

f:id:taxa_program:20170724224720p:plain

今日は新規プロジェクトの追加処理を実装します。

  • プロジェクト追加ボタンの実装
  • 追加処理の実装(コントローラ)
  • 追加処理の実装(ビュー)
  • 追加処理の実装(データの保存)

プロジェクト追加ボタンの実装

まずはメインビューにプロジェクトを追加するためのボタンを追加します。

taskapp/app/views/projects/index.html.erb

<h1>Projects</h1>

<ul>
  <% @projects.each do |project| %>
  <li><%= link_to project.title, project_path(project.id) %></li>
  <% end %>
</ul>

<p><%= link_to "Add_New", new_project_path %></p>

これでAdd_Newボタンが追加されました。

追加処理の実装(コントローラ)

コントローラにnewメソッドを追加します。

taskapp/app/controllers/projects_controller.rb

class ProjectsController < ApplicationController
  def index
    @projects = Project.all
  end
  def show
    @project = Project.find(params[:id])
  end
  #==追加
  def new
    @project = Project.new
  end
  #==追加
end

追加処理の実装(ビュー)

コントローラに追加したnewメソッドのビューを作成します。

続きを読む

Ruby on railsでタスクアプリを作成してみる~共通テンプレート編~

f:id:taxa_program:20170724224720p:plain

今日は、全画面共通の設定を行ってみます。

画像の設定

下記ファイルを編集
taskapp/app/views/layouts/application.html.erb

  <body>
    <%= image_tag "logo.png" %>
    <%= yield %>
  </body>

logo_pngファイルは下記フォルダに保存しておくと、使用できます。 taskapp/app/assets/images/logo.png

ページを表示させてみます。

f:id:taxa_program:20170729150612p:plain

ちょっとだけオシャレになりました。

あとはHOMEへ戻るボタンも設定してみます。

  <body>
    <%= image_tag "logo.png" %>
    <%= yield %>
    <%= link_to "Home", "/" %>
  </body>

f:id:taxa_program:20170729150822p:plain

無事に設定できました!

Ruby on railsでタスクアプリを作成してみる~showアクション~

f:id:taxa_program:20170724224720p:plain

今日もタスクアプリを作成していきます。 p1, p2 の処理を追加していきます。

パスの設定

下記ファイルを編集します。
taskapp/app/views/projects/index.html.erb

<h1>Projects</h1>

<ul>
  <% @projects.each do |project| %>
  <li><%= link_to project.title, project_path(project.id) %></li>
  <% end %>
</ul>

project.titleにパスを設定しているのですが、ここで設定している
project_path(project.id)の部分はどこに定義されているかというと、
下記コマンドを実行すれば分かります。

$ rake routes

>      Prefix Verb   URI Pattern                  Controller#Action
>    projects GET    /projects(.:format)          projects#index
>             POST   /projects(.:format)          projects#create
> new_project GET    /projects/new(.:format)      projects#new
>edit_project GET    /projects/:id/edit(.:format) projects#edit
>     project GET    /projects/:id(.:format)      projects#show
>             PATCH  /projects/:id(.:format)      projects#update
>
>             PUT    /projects/:id(.:format)      projects#update
>             DELETE /projects/:id(.:format)      projects#destroy
>        root GET    /                            projects#index

上記のproject GET /projects/:id(.:format) projects#show
の部分が設定されていることになります。

showアクションの追加

projects#showとあるので、controllerにshowメソッドを追加する必要があります。

taskapp/app/controllers/projects_controller.rb

class ProjectsController < ApplicationController
  def index
    @projects = Project.all
  end
  # --追加
  def show
    @project = Project.find(params[:id])
  end
  # --追加
end

また、同様にビューの作成も必要となります。
ここではtitleの表示のみを行ってみます。

taskapp/app/views/projects/show.html.erb

<h1><%= @project.title %></h1>

f:id:taxa_program:20170729155222p:plain

うまく表示されました。

Ruby on railsでタスクアプリを作成してみる~ビューの作成~

f:id:taxa_program:20170728005217p:plain

前回の続きで、今日もタスクアプリをがしがし作成していきます。
前回記事はコチラから。
taxa-program.hatenablog.com

  • コントローラにアクションを作成
  • ビューの作成
  • ailsサーバを起動してアクセス
  • ルーティングの設定

コントローラにアクションを作成

前回記事で、コントローラの作成は終了しているので、
今日はコントローラにアクションを追加していきます。
下記ファイルを編集しましょう。
taskapp/app/controllers/projects_controller.rb

続きを読む