せいかつノート

読者です 読者をやめる 読者になる 読者になる

せいかつノート

日々の生活を少しだけ良くする

大学の先輩からRailsをやれと言われたから勉強してみる3

コンピュータ コンピュータ-Ruby on Rails

dotinstall.com

Railsシリーズ第三弾です。ドットインストールの#4を進めていきます。

f:id:kiyo468:20160221222402p:plain

Scaffoldを使うためにUserでstring型のnameとinteger型のscoreを生成させるつもりがstringをStringと書いて、rake db:migrateでコケてしまったのでscaffoldを取り消します。

gutch.hatenablog.com

rails destroy scaffold Userで取り消せました。改めて、rake db:migrateを打ち込んだらうまくいきました。

f:id:kiyo468:20160221223115p:plain

usersでアクセスするとSQL文なんて書いていないのに登録、変更、削除ができます。やっぱ強烈やなぁ…

これだけだと進捗が悪すぎるので#5に進みたいと思います。

新しいアプリを作るコマンド

rails new [アプリ名] --skip-bundle

オプションをつけると早くなるそうです。ここは問題なくOK

 

Gemfileの編集

rubyracerというものを有効化しないと動かないので

vi Gemfileと打ち込み、therubyracer行のコメントを外します。

f:id:kiyo468:20160221223624p:plain

サーバも動いたので先に進みます。

モデルの作成

今回打ち込んだコマンドが

rails g model Project title

g:generate

Project:モデル名

title:変数名

です。モデル名は先頭大文字かつ単数形で表現する命名規則があるそうです。titleの型はstringです。何もつけなければstringなので今回は省略。その後

rails db:migrate

でマイグレートします。ここまではOKそのまま#6へ進みます。

DBの確認

コマンドは

rails db

SQLiteなのでMySQLとは少しだけ勝手が違いますが何とかなりそう。.schemaと打ち込むとテーブルスキーマが確認できます。

CREATE TABLE "projects" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);

CREATE TABLE "schema_migrations" ("version" varchar NOT NULL);

CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");

DBから出るには

.exit

 

Railsコンソール

次にrailsのコンソールというものがあるのでそれを使ってみる。

rails console

で入れます。そこで

p = Project.new(title: "p1")

と打ち込むと

=> #<Project id: nil, title: "p1", created_at: nil, updated_at: nil>

オブジェクトらしきものが作られました。ここではまだnewしているだけなのでsaveしないと反映されないみたいです。

p.save

この状態でpといれると確認できます。

p

と入れると

<Project id: 1, title: "p1", created_at: "2016-02-21 13:44:39", updated_at: "2016-02-21 13:44:39">

これだけで保存できているらしい。さらにcreateはnewとsaveを同時にしてしまう

Project.create(title:"p2")

Project.allで保存されている内容がすべて見えます

Project.all

[#<Project id: 1, title: "p1", created_at: "2016-02-21 13:44:39", updated_at: "2016-02-21 13:44:39">, #<Project id: 2, title: "p2", created_at: "2016-02-21 13:45:16", updated_at: "2016-02-21 13:45:16">]>

なるほど。

終わるときはquitです。

quit

乗ってきたので#7もやっちゃいます。

コントローラの作成

次にコントローラを作ります。コマンドは

rails g controller Projects

モデルProjectに対するコントローラについては複数形で書くらしいです。

routes.rbの編集

config内にあるらしい、このファイルはルーティングのためのファイルっぽいです。ぽちぽち移動してresources :projectsと書いときます。

f:id:kiyo468:20160221230253p:plain

ルーティングの確認

ファイル編集から戻ってルーティングができているか確認します。

rake routes

(in /home/vagrant/taskapp)

      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

見たところ#以降がクラスでGETされた時indexが呼ばれるというイメージかな。多分あってると思う。ふむふむ中々面白い。#7まで完了しました。今日はこの辺で終わります。