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 ピチカート街道 - 変数名の命名規則 -

@ではじまるのはRubyではインスタンス変数。

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から渡された値を使える

基本的にはこんな感じでアプリの作成を進めていけばよさそう。

疑問点

  1. @projectsの中には何が入ってる?->webで表示させると
#<Project::ActiveRecord_Relation:0x007f928dbc87f8>

Project::ActiveRecord_Relationというクラスのインスタンスが入っていた。これにProjectインスタンスたちが入っているという感じか。