Rails newした後に最初にやること【dotinstallでRailsの基礎を勉強したノートその1】
リポジトリはここ。
https://github.com/totzYuta/dotinstall_ruby-on-rails
エピソードごとにコミットするようにした。
うまくrailに乗れるようになるために命名規則は強調した
目次
Model
Modelの作成
まずはmodelを作成する
$ rails g model Project title:string
命名規則:modelは単数形の最初大文字
migrate
migrationファイルから実際にデータベースを構築(反映)
$ rake db:migrate
便利なコマンド
データベースへアクセスしたければ、以下のようにすればok
$ rails db
以下のようにしてconsoleを使える。irbが立ち上がってインタラクティブにrubyを実行できる。
$ rails console
どうやって使うかわからなかったけど、下の例を見るとわかりやすい。
- 新しいオブジェクトを生成してDBに突っ込む
irb(main):001:0> p = Project.new(title: "p1") => #<Project id: nil, title: "p1", created_at: nil, updated_at: nil> irb(main):002:0> p.save (0.2ms) begin transaction SQL (15.4ms) INSERT INTO "projects" ("created_at", "title", "updated_at") VALUES (?, ?, ?) [["created_at", "2014-11-05 08:17:43.928798"], ["title", "p1"], ["updated_at", "2014-11-05 08:17:43.928798"]] (1.4ms) commit transaction => true
- まとめてこんなふうにもかける
irb(main):004:0> Project.create(title: "p2") (0.1ms) begin transaction SQL (14.9ms) INSERT INTO "projects" ("created_at", "title", "updated_at") VALUES (?, ?, ?) [["created_at", "2014-11-05 08:20:00.539629"], ["title", "p2"], ["updated_at", "2014-11-05 08:20:00.539629"]] (1.3ms) commit transaction => #<Project id: 2, title: "p2", created_at: "2014-11-05 08:20:00", updated_at: "2014-11-05 08:20:00">
- 中身をみるときは
irb(main):005:0> Project.all Project Load (0.2ms) SELECT "projects".* FROM "projects" => #<ActiveRecord::Relation [#<Project id: 1, title: "p1", created_at: "2014-11-05 08:17:43", updated_at: "2014-11-05 08:17:43">, #<Project id: 2, title: "p2", created_at: "2014-11-05 08:20:00", updated_at: "2014-11-05 08:20:00">]>
ようするにAcriveRecordをirbで実行しているわけかーーーなるほど
Controller/View
続いてControllerとViewを作成していきます。
Controllerの作成
以下でControllerを作成。
$ rails g controller Projects
これでapp/projects_controller.rb
が生成される。
ルーティング設定
先にルーティング(URL)の設定をしておく。
config/routes.rb
に以下を書き加えるとprojectsに関するURLを自動で設定してくれる
resources :projects
- 以下でルーティングを確認する
$ rake routes
Actionの作成
続いてさっきできたControllerにAction(メソッド)を定義します。
class ProjectsController < ApplicationController def index @projects = Project.all end end
脇道にそれるけど、@ではじまる変数の意味を忘れかけていたので
Ruby On Rails ピチカート街道 - 変数名の命名規則 -
Viewの作成
さっきのアクション名に対応するように、app/views/projects/index.html.erb
を作成して編集
命名規則:app/views/model複数形/アクション名.html.erb
<h1>Projects</h1> <ul> <% @projects.each do |project| %> <li><%= project.title %></li> <% end %> </ul>
これで、ルーティングで設定したindexアクションのURLにアクセスするとprojectの一覧を表示できる。
まとめ
今回の全体の流れをまとめてみると、、、
1. Model: modelを作成する(migrationファイルが生成される) 2. テーブルの構築(migrate) 3. Controller: indexアクション内でActiveRecordを利用してデータを拾ってくる。それをインスタンス変数に格納(Controllerでインスタンス変数に突っ込んだら、それをViewでも使える) 4. ルーティングの設定 5. View: ”@インスタンス変数名”でControllerから渡された値を使える
基本的にはこんな感じでアプリの作成を進めていけばよさそう。
疑問点
- @projectsの中には何が入ってる?->webで表示させると
#<Project::ActiveRecord_Relation:0x007f928dbc87f8>
Project::ActiveRecord_Relation
というクラスのインスタンスが入っていた。これにProject
のインスタンスたちが入っているという感じか。