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

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

ドットインストールで作るブログアプリその1(RubyonRails)

本日から勉強再開いたします。

例のごとくドットインストールのRails5の動画を元に学んでいきます!

  • Scaffoldとは
  • はじめの一歩
  • モデルの作成
  • データの作成(コンソール編)
  • データの確認(sqlite編)
  • データの管理(ファイル編)

Scaffoldとは

ひとつの雛形を作成してくれるものらしい。
使用するデータの型などを指定して、自分の作りたいものの土台を作ることができる。 それもコマンド一つで。
これは便利だが、実践ではあまり使わない。

はじめの一歩

newコマンドでディレクトリを作成します。

$rails new myblog

ここで様々なフォルダが作成されるが、メインで使用するのは主に下記3フォルダ

  • app(アプリの内容)
  • config(様々な設定)
  • db(DB操作)

ここで想定外のエラーが
(1ヶ月前は普通に動いていたのに...)

An error occurred while installing nokogiri (1.8.1), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.8.1'` succeeds before bundling.

なんとか解決方法を見つけましたの、同じ箇所で躓いた方は参考にしてみてください。

taxa-program.hatenablog.com

モデルの作成

いろいろありましたが、myblogディレクトリが作成できました。
次はモデルの作成を行います。

$rails g model Post title:string body:text

このコマンドでのポイントは下記

  • modelの名前は必ず単数系(Post)にする
  • stringは1行の文字列
  • textは複数行の文字列

そしてデータ構造とデータベースに反映させます。

$rails db:migrate

データの作成(コンソール編)

試しにデータを挿入してみましょう。
下記コマンドでDBコンソールを立ち上げます。

$rails c

そしてコンソールで作成と検索を行ってみます。

--作成
>Post.create(title: 'title', body: 'body')
--一覧表示
>Post.all
--コンソールの終了
>quit

データが格納されているのが確認できたと思います。

データの確認(sqlite編)

データベースを直接覗いてデータのチェックを行うこともできます。

$ rails db

デフォルトではsqliteが起動すると思います。

続きを読む

Rails newコマンドでinstalling nokogiri (1.8.1)エラーが発生したときの対処手順

目次

実行環境

OS:macOS Sierra Ver.10.12.5
Ruby:2.4.1
Rails:5.1.4

エラー

Railsの勉強中に起きたエラー。
rails newコマンドを実行すると下記エラーが。。。
ほぇ、、、なんじゃこりゃ

An error occurred while installing nokogiri (1.8.1), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.8.1'` succeeds before bundling.

エラーの通りに

gem install nokogiri -v '1.8.1'

と入力してもダメでした。

解決方法

この解決方法を見つけたため、備忘録として残しておきます。

このQiitaの記事を参考に解決できました。

$ brew update
 :
$ brew install libxml2
 :
$ brew link --force libxml2
$ gem install nokogiri -- --use-system-libraries
 :
$ brew unlink libxml2

ありたがや。
こんなの一人で解決できる気はしない。
開発環境構築で挫折する人が一人でも減ることを祈ります。

久しぶりの投稿です

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

無事に設定できました!