いーほろよいの技術ブログ

IT技術ブログになります。

Ruby on Railsのお勉強 〜お問い合わせフォーム編(Controller) その4〜

はじめに

前回の作業でテーブルとモデルの準備ができたので、今回はフロントまわりのコントローラーをやってみたいと思います。

コントローラーについては入力(index)、確認(confirm)、送信(thanks)ページ構成を考えております。

この過程でパラメータの受け渡しや、テーブルへの書き込みなどを学んでいきたいと思うのですが、全部やると長いため、今回はコントローラーのgenerateとルーティング(config/routes.rb)に絞ります。

↓テーブル、モデルの準備はこちらの記事で確認できます。

e-horoyoi.hatenablog.com

 

コントローラー準備

index、confirm、thanksの作成

"rails generate"で作成していきます。

コマンドは下記の通りです。

>bundler exec rails g controller inquiry index confirm thanks

これを実行すると関連するファイルが作成されます。

色々と作成されるのですが、今回は実際のアクションに関わるファイルだけ取り上げます。

ルーター(作成というより更新)

リクエストされた"お問い合わせのURL"を、どのコントローラーのアクションに誘導するのか指定する設定ファイルです。

config/routes.rb

コントローラーをgenerateしたばかりの時は単純なルーティングしか用意されません。

変更前
Rails.application.routes.draw do get 'inquiry/index' get 'inquiry/confirm' get 'inquiry/thanks'

しかし、お問い合わせページ遷移時のURLに"index有り無し対応"、入力時に戻るなども発生するので"indexアクションはGET、POSTを受け付けられる"ようにしたいといった要望が出てくると思うので、下記のように書き換えます。

変更後
Rails.application.routes.draw do match 'inquiry' ,to: 'inquiry#index', via: [:get, :post] match 'inquiry/index' ,to: 'inquiry#index', via: [:get, :post] post 'inquiry/confirm' post 'inquiry/thanks'

 

ルーティングについては↓こちらに詳しい説明があります。

railsguides.jp

ですが、入門で読むにはちょっと難しいかも...ルーティングを実装している何かしらのフレームワークを体験していれば、ある程度は見当がつくのですがRailsのルーティングはやれる事が多すぎて戸惑います。

とりあえず、設定したら下記のコマンドで意図した動きになるか確認が必要です。

>bundler exec rake routes

結果
Prefix Verb URI Pattern Controller#Action inquiry GET|POST /inquiry(.:format) inquiry#index inquiry_index GET|POST /inquiry/index(.:format) inquiry#index inquiry_confirm POST /inquiry/confirm(.:format) inquiry#confirm inquiry_thanks POST /inquiry/thanks(.:format) inquiry#thanks

 

コントローラークラス

お問い合わせのリクエストを受けるコントロールクラスです。

このクラスの中にindex、confirm、thanksアクションメソッドが存在します。

app/controllers/inquiry_controller.rb

 

出力テンプレートファイル

受けたリクエストをレスポンス(HTML形式で)するためのテンプレートファイルです。

app/views/inquiry/index.html.erb

app/views/inquiry/confirm.html.erb

app/views/inquiry/thanks.html.erb

 

これでコントローラーの準備は整いました。

次は実際にHTMLを組んでDBへ書き込みまで出来れば良いかな?っといった感じです。

 

以上、最後まで読んでいただきありがとうございます。

 

 

Ruby on Railsのお勉強 〜お問い合わせフォーム編 その3〜

はじめに

前回はrakeコマンドを使用してDBを作成するところまでやりました。

e-horoyoi.hatenablog.com

 

 今回は作成したDBにテーブルとプロジェクトにモデルを作成してみたいと思います。

テーブル構成はその1で書いてある構成を考えております。 

e-horoyoi.hatenablog.com

 

 

モデル&テーブル作成

↓またまた、こちらのドキュメントからコマンドの使用方法を確認しました。

railsコマンド(rails) - - Railsドキュメント

大雑把に流れを説明すると

  • "rails generate model ..."でモデルクラスとMigrationスクリプト()を作成
  • "rake db:migrate ..."でテーブルを作成

※Migrationスクリプトという名称で正解か自信がありません。間違っていたらゴメンなさい。

モデル作成

generaterを使用してモデルの作成をします。

カラムを指定しないでmigrationスクリプトだけ作成して、後でスクリプトを手動で編集しても良いかも知れません。

>bundler exec rails generate model inquiry name:string mail:string telephone:string

上記のコマンドでモデルを作成すると同時に"db/migrate"以下にMigrationスクリプトが生成されます。

その中身が↓になります。 

class CreateInquiries < ActiveRecord::Migration
  def change
    create_table :inquiries do |t|
      t.string :name
      t.string :mail
      t.string :telephone

      t.timestamps null: false
    end
  end
end

 

テーブル作成

Maigrationスクリプトが生成できたら、今度はテーブルの作成です。

先日、DBを作成した時のように権限の強い定義を指定して作成します。

>bundler exec rake db:migrate RAILS_ENV=development_root

問題無ければ下記のようなテーブルが作成されます。

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255) | YES  |     | NULL    |                |
| mail       | varchar(255) | YES  |     | NULL    |                |
| telephone  | varchar(255) | YES  |     | NULL    |                |
| created_at | datetime     | NO   |     | NULL    |                |
| updated_at | datetime     | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

 後は、modelクラスを整える作業だと思うのですが、この段階だと説明できる事が無いので、コントローラーの組み込みと合わせてモデルクラスを編集していく事にしたいと思います。(Validationとかモデルに含む事になると思うので)

 

一旦、モデルから離れて次回はコントローラーに入りたいと思います。

 

以上、最後まで読んでいただきありがとうございます。

 

Ruby on Railsのお勉強 〜お問い合わせフォーム編 その2〜

先日のトホホな問題を解決できたので、本日はDB辺りを攻めてみたいと思います。

↓トホホな話はこちら

e-horoyoi.hatenablog.com

 

MariaDBをインストールした時に開発環境用のDBを作成したのですが、色々と調べていくうちにrakeコマンドでデータベースを作成できる事が判明したので、その辺の手順をアップしていきたいと思います。

 

↓この辺に使い方がありました。

Rake - - Railsドキュメント

 

データベースを作成するまで

設定ファイルを編集

初期状態だとsqlite3の設定になっていると思うので自分の環境に合わせて書き換えます。(今回は開発環境だけ)

>vi config/database.yml


# MariaDB version 0.4.8
#   gem install mysql2
#
#   Ensure the mysql2 gem is defined in your Gemfile
#   gem 'mysql2'
#
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  timeout: 5000

development_root:
  <<: *default
  database: # 開発DB名
  username: root
  password: # rootのパスワード
  host: localhost

development:
  <<: *default
  database: # 開発DB名
  username: # 開発ユーザー名
  password: # 開発ユーザーのパスワード
  host: localhost

development_root、developmentと用意しております。

理由はrakeコマンドでデーターベースを作成するなど強い権限をもったユーザーと使い分けするためです。

  • development_root → 開発DBを操作するため
  • development → 通常使用

 

データベースを作成

環境(RAILS_ENV)を指定してデータベースを作成

>bundler exec rake db:create RAILS_ENV=development_root

データベースが作成されたか確認

>mysql -uroot -p -e "show databases"

 ※database.ymlのdevelopment_rootにて指定したdatabaseの名前でデータベースが作成されていれば成功です。

 

今日はここまで

準備ばかりでなかなか先に進まない...

次回はテーブル作成してみたいと思います。

Ruby on Railsのお勉強 〜お問い合わせフォーム編 その1〜

はじめに

お問い合わせフォームを作成する事で、Railsの取り扱い方を勉強してみたいと思います。

主に下記の機能を試してみたいと思います。

  1. Generaterの使い方
  2. Routesの使い方
  3. GET/POSTパラメータの受け取り方
  4. DB接続(development / staging / production)

他にもSESSION、キャッシュサーバーなど必要かと思いますが、この辺は後日に調べます。

 

前回の作業でプロジェクトまで作成しているので、そのプロジェクト内で作業を進めます。

e-horoyoi.hatenablog.com

 

テーブル構成

とりあえず、テーブル構造は下記を考えています。

※手探りなので命名規則Railsのお作法に沿ってないかも...その場合は随時直していきます。

Table

  inquiry

Columns

  id integer 

  name verchar(255)

  mail verchar(255)

  telephone verchar(255)

  created_at datetime

  updated_at datetime

id、created、updatedは自動でできるらしいです。

環境構築

先日、MariaDBをインストールしたので、RailsでDB接続するための環境構築します。

e-horoyoi.hatenablog.com

 

パッケージの追加

MariaDBへ接続するためのパッケージをインストールします。

どうやらmysql2というパッケージがMariaDB接続に必要みたいです。

で、mysql2をインストールする前に下記のyumパッケージをインストールしないとエラーになる。

>yum install MariaDB-devel MariaDB-shared

ここでハマった...

 

疲れたので実際にテーブル作成するのは後日にします。トホホです。

 

 

 

CentOS7へのMariaDBインストールについて

Ruby on Railsの勉強中ですが、ここでDB接続の準備のためMariaDBをインストールしてみたいと思います。

 

MariaDBを選択した理由は"使ってみたかった"だけです。

 

MariaDBのHPにインストール方法が詳しく記述されております。(ありがたや)

mariadb.com

 

さっそくインストール

と言っても、単にMariaDBの手順に沿ってやるだけです。

リポジトリの追加とyum install、後は初期化をゴニョゴニョするだけ。

 

リポジトリの追加

下記のリポジトリ作成ページで自動生成した設定情報を貼り付けるだけ。

MariaDB - Setting up MariaDB Repositories - MariaDB

>vi  /etc/yum.repos.d/MariaDB.repo

 

 インストール

>yum install MariaDB-server MariaDB-client

面倒な人はオプションの"-y"を付けて実行すれば楽チンです。

 

MariaDBのシステム設定&起動

>systemctl enable mariadb.service

>systemctl start mariadb.service

 

MariaDB初期化

公式HPにある手順で初期化してみます。

mariadb.com

>mysql_secure_installation

色々聞かれてくるけど、やった事はrootのパスワード設定と各質問に"y"を押すだけ。

 

DBとユーザー作成

MariaDBに接続してデータベース、ユーザーを作成する。

※クローズな開発環境なのでテキトーです。

DB名:rbhoge

ユーザー名:rbhoge

 

DB作成

>create database rbhoge;

 

ユーザー作成

>create user rbhoge@'localhost' identified by '{password}';

 

権限付与

>grant all on rbhoge.* to rbhoge@'localhost';

 

以上でDBの準備は終了です。

 

Ruby on Railsのお勉強に戻ります!

Ruby on Railsのお勉強 〜おさらい〜

Railsをやろうと思った経緯

ここ数年でRailsの要望が今まで以上に、すごいスピードで上がってきている事を実感したので、使えるようになろうかと重い腰をあげました。

正直、バックエンドのFWはパフォーマンスと運用コストが見合っていれば『なんでもいいじゃない?』っていうのが私の意見なのですが...

 

環境構築のおさらい

以前、環境構築でrbenvとbundlerのインストールの記事を書いております。

今回は用語と工程のおさらいに止めます。

環境構築を確認されたい方は↓の記事を確認お願いします。

 

e-horoyoi.hatenablog.com

 

 

e-horoyoi.hatenablog.com

 

用語

先ずは各用語について、おさらいです。(簡単な説明のみ)

rbenv

複数のRubyバージョンを管理する。

 

gem

rubyのパッケージを管理する。

 

bundler

gemの一部でパッケージを一括管理できる。

 

Ruby on Rails開発環境を作るまでの工程

  1. rbenvのインストール(この時点で同時にgemはインストールされる)
  2. 使用するrubyのバージョンを指定してインストール
  3. bundlerのインストール
  4. 開発するための場所(ディレクトリ)を作成して移動
  5. 移動先のディレクトリ内でbundlerの初期化(Gemfile作成)を行う
  6. 作成されたGemfileに使用するrailsのバージョンを記述してrailsをインストール
  7. railsコマンドでプロジェクトを作成(ここでほぼ環境構築おわり)

 

実際の組み込み作業

構成

プロジェクト : rbhoge

 

手順

>mkdir rbhoge

>cd rbhoge

>rbenv local 2.4.1

>bundler init

>vi Gemfile

gem "rails", "{version}" を追記

>bundler install --path vendor/bundler

>bundler exec rails new .

>vi Gemfile

"therubyracer"のコメントアウトを外す

>bundler install --path vendor/bundler

 

とりあえず、ここまで

 

次回からは簡単なお問い合わせフォームを作ってみたいと思います。 

virtualenvをインストールしようと思ったらpyenv-virtualenvになった

間が空いてしました。

色々と忙しくて...(言い訳です。)

 

↓前回、pyenvをインストールした話の続きです。

e-horoyoi.hatenablog.com

 

virtualenvをインストールしようと思ったらpyenv-virtualenvというプラグインがあるようなので、大人しくそれをインストールします。(正直、違いがよくわかっていません。)

分かっている事はpyenv-virtualenvを使用する事でpyenvでインストールした各バージョンのプラグインを分けて使用できるようになるようです。

例えば、バージョン3.6.1にパッケージのipythonが入っている仮想環境、入っていない仮想環境という具合に別々の環境が作れる。

 

インストールはGitHubに公開されているpyenv-virtualenvにあるreadmeの手順に沿って行うだけです。

github.com

 

手順

pyenv-virtualenvの準備

>git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

 

cloneできたか確認する。(pyenv-virtualenvがあればOK

>ls -l ~.pyenv/plugins/

 

ログイン時にvirtualenvが有効になるように設定ファイルに追記

>echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

 

設定ファイルの読み直し

※個人的には"souce ~/.bash_profile"をオススメします。(何故かpyenv shellが認識されなかったので)

>exec "$SHELL"

 

作成する仮想環境に必要なpythonのバージョンをインストール

今回は2.7系を予めインストールしておく(3系でも手順は同じです)

>pyenv install 2.7.13

↓警告が出るけどインストールできた。

WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?

 

仮想環境の作成

バージョンが2.7.13のmy-virtual-env-2.7.13という仮想環境を作成する。

コマンド実行後に"ls -l ~/.pyenv/versions/"を実行すると分かり易いです。

インストール済みの各バージョン以下のenvsディクトリ以下に作成されます。

それを各バージョンと同じ階層にシンボリックリンクを貼ってます。

>pyenv virtualenv 2.7.13 my-virtual-env-2.7.13

 

検証用にenv2.7.13という仮想環境も作成する。

>pyenv virtualenv 2.7.13 env2.7.13

 

仮想環境の構築 (その1)

作成された仮想環境(my-virtual-env-2.7.13)を構築するためアクティブ状態にします。

※これを実行するとbashプロンプトにアクティブ状態の仮想環境名が表示されます。

 >pyenv activate my-virtual-env-2.7.13

 

試しに作成した仮想環境(my-virual-env-2.7.13)にipythonをインストール

>pip install ipython

 

インストールされた事を確認

>pip show ipython

 

仮想環境の構築 (その2)

このままenv-2.7.13に切り替えてipythonがインストールされているか確認してみます。

>pyenv activate env2.7.13

 

ipythonがインストールされているか確認

>pip show ipython

※表示されないはず 

 

まとめ

流れとやる事を下記にまとめます。

 

予め作成する仮想環境に対応したpythonのバージョンをインストール

>pyenv install {バージョン}

 

仮想環境の作成(必要な分)

>pyenv virtualenv {pythonのバーション} {仮想環境名}

 

作業ディレクトリを作成

>mkdir ~/{作業ディレクトリ名}

 

作業ディレクトリに移動して仮想環境を指定

>cd ~/{作業ディレクトリ名}

>pyenv activate {仮想環境名}

 

仮想環境に合わせてプラグインをインストール

作成した仮想環境ごとに使用するプラグインをインストールする。

※心配なら仮想環境以下を覗いて確認

python2系

>pip install {パッケージ名}

 

python3系

>pip3 install {パッケージ名}

 

仮想環境別のパッケージインストールの確認する場所

~/.pyenv/versions/{仮想環境名}/lib/{pythonバージョン}/site-packages/

 

仮想環境から抜ける

作業が終り仮想環境から抜けたいとき

>pyenv deactivate

 

以上、virtualenvあらためpyenv-virtualenvでした!

 

次回予告

php-envをやろうかと思ったのですが、Ruby on Railsを掘り下げてみたいと思います。

 

最後まで読んでいただきありがとうございます!