<<前 [TOP] 次>>
MySQLデータベースを使用して「shop」アプリケーションを作り直します。
「work」フォルダにある今まで作成してきた「shop」フォルダは別の場所に移動して「work」フォルダが何もない状態にしておいて下さい。
ではコマンドプロンプトで「work」フォルダに移動して「rails new shop --database=mysql
」と入力します。
最後をメッセージを見ると、「MySQL Connector/C version 6.1.11」が必要だとかいてあります。
ここに書いてある「http://cdn.mysql.com/Downloads/Connector-C/mysql-connector-c-6.1.11-win32.zip」にアクセスして「mysql-connector-c-6.1.11-win32.zip」ファイルをダウンロードします。
ダウンロードされたzipファイルを展開して、「lib」フォルダにある「libmysql.dll」ファイルをコピーします。
コピーした「libmysql.dll」ファイルをRubyをインストールしたフォルダ「C:\Ruby24-x64」の「bin」フォルダに貼り付けます。
作成されている「shop」フォルダを「work」フォルダから削除し、もう一度「rails new shop --database=mysql
」と入力します。
今度はうまくいきました。
次にWebアプリケーション用のデータベースを作成します。
作成するデータベースは3つ必要となります。
一つめは「開発用データベース」、二つめは「テスト用データベース」、三つ目は「本番用データベース」です。
このように「アプリケーション名_development」「アプリケーション名_test」「アプリケーション名_production」がデフォルトの名前になります。
まず、コマンドプロンプトでshopフォルダに入って、「mysql -u root -p」と入力します。
そうすると、MySQLのインストール時に入力したルート(root)パスワードを聞いてきますので入力して下さい。
これでMySQLにログイン出来ます。
上記3つのデータベースを作成します。
データベースの作成には「create database」を使用します。
例えば、「
create database shop_development;
」とすると、「shop_development」データベースがMySQLに作成されます。最後のセミコロン(;)を忘れないようにして下さい。
また、同時に「default character set utf8」として、日本語文字コードの指定を行います。
このようにデータベース作成時に文字コードを指定しないと、文字化けが起こります。
以下のコマンドでデータベースを3つ作成します。
「
create database shop_development default character set utf8;
」「
create database shop_test default character set utf8;
」「
create database shop_production default character set utf8;
」次に、作成したデータベースにユーザ権限を与えます。
権限を与えるには「grant all」を使用します。
例えば、「grant all on shop_development.* to 'rails'@'localhost';」としたら、ユーザ名がrails、ホストがlocalhostでアクセスしてきたものにすべての権限を与えるという意味になります。
ここで、localhostの部分を「%」にすると、別のネットワークPCからのデータベースアクセスが可能になります。
今回は、1台のPCのみで開発することを想定して、「localhost」とします。
まずはユーザを作成します。
ユーザの作成には「create user」コマンドを使います。
「
create user rails@'localhost' identified by '';
>」また、「
grant all on shop_production.* to 'rails'@'localhost' identified by 'administrator';
」とすると、ユーザ名がrails、ホストがlocalhost、パスワードがadministratorでアクセスしてきたものにすべての権限を与えるという意味になります。では、パスワードをつけて権限を与えてみます。空パスワードだと「rake db:migrate」する際にエラーが出て接続できません。
以下の3つのコマンドを実行します。
「
grant all on shop_development.* to 'rails'@'localhost' identified by 'rails';
」「
grant all on shop_test.* to 'rails'@'localhost' identified by 'rails';
」「
grant all on shop_production.* to 'rails'@'localhost' identified by 'rails';
」「exit;」と入力してMySQLを抜けます。
Railsとデータベースを接続するためには、先ほどデータベースの権限を設定した情報をRailsに知らせる必要があります。
データベースの接続情報は「shop」フォルダの「config」フォルダにある、「database.yml」に記述します。
デフォルトの「database.yml」ファイルは以下のようになっています(コメント以外を抜粋)。
【shop/config/database.yml】
default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: host: localhost development: <<: *default database: shop_development test: <<: *default database: shop_test production: <<: *default database: shop_production username: shop password: <%= ENV['SHOP_DATABASE_PASSWORD'] %>
大きく、開発、テスト、本番の3つに分かれています。
それぞれの項目について説明します。
これを以下のように書き換えます。
default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: rails password: rails host: localhost development: <<: *default database: shop_development test: <<: *default database: shop_test production: <<: *default database: shop_production username: rails password: rails
「default」の「username」を「rails」、「 password」も「rails」です。
「production」も同じです。
まずは、商品を格納するテーブルを作成します。
テーブルの名前は必ず複数形にするのがルールです。
この後、実際にRubyでコードを書いていくモデルクラスというものが登場しますが、そのモデルクラスの名前は単数形で最初の文字は大文字というルールがあります。
このようにルール通り名前をつけておくと、モデルクラスでわざわざテーブル名を指定しなくてもRailsが自動的にテーブルを探し出すことが出来ます。
では、商品のテーブルを作成してみましょう。
「goods」という単語を使い、モデル名は「good」です。
作成するフィールドの内容は次のようにします。
SQLiteの時とはデータ型が違います。
Railsでは「scaffold」を使ってテーブルを生成していきます。
rails generate scaffold モデル名(単数形) フィールド名1:データ型 フィールド名2:データ型
ではコマンドプロンプトで「shop」フォルダに移動し、「rails generate scaffold good goods_id:integer title:string description:text image_url:string price:decimal date:datetime maker:string category:string
」と入力します。
これでアプリケーションに必要なモデルやビューなどが作成されました。
では「db」フォルダの「migrate」フォルダにある「create_goods.rb」ファイルを見てみます。
【db/migrate/create_goods.rb】
class CreateGoods < ActiveRecord::Migration def change create_table :goods do |t| t.integer :goods_id t.string :title t.text :description t.string :image_url t.decimal :price t.datetime :date t.string :maker t.string :category t.timestamps end end end
priceフィールドの型「decimal」を10桁、小数点第2位の数字に定義したいので、「create_goods.rb」ファイルを以下のように修正します。
【db/migrate/create_goods.rb】
class CreateGoods < ActiveRecord::Migration def change create_table :goods do |t| t.integer :goods_id t.string :title t.text :description t.string :image_url t.decimal :price, :precision => 10, :scale => 2, :default =>0 t.datetime :date t.string :maker t.string :category t.timestamps end end end
以下の部分が違います。
t.decimal :price, :precision => 10, :scale => 2, :default =>0
「decimal」を10桁、小数点第2位の数字でかつ、デフォルトの値を「0」で定義しています。
では、実際にこのファイルをデータベースに適用してみます。
コマンドプロンプトで「rake db:migrate
」と入力してください。
実際にテーブルが出来ているかどうか見てみます。
コマンドプロンプトでMySQLに接続して、「use shop_development;
」と入力すると「shop_development」データベースに接続できます。
その後「show tables;
」と入力してテーブル一覧を見てみます。
「goods」テーブルが出来ているのがわかります。
次に「describe goods;
」と入力してテーブルの中身を見てみます。
編集したとおりのテーブルがデータベースに出来上がりました。
Rails5.1では自動生成される「id」フィールドが「bigint」型でしたが、Rails4.2では「int」型になっています。
↓↓クリックして頂けると励みになります。