frontendmemo

このサイトは、「html、css、js、ruby,ツールなどについて、自分が覚えたこと、またはいつも忘れて調べることを書き溜め、それが結果といて勉強したての初心者の方や自分と同じような技術レベルの人の助けになることを目的とするWebログ」、略してブログです。挨拶→http://frontendmemo.hatenablog.com/entry/2016/06/25/115845

Ruby初心者が躓きがちな基本まとめ

スポンサードリンク


スポンサードリンク


TECH::CAMPでrubyを学んでいて、学習していくうちに基本を忘れてるがために先に進めなくなることはよくあります。そんな基本をまとめてみました。

ルーティング

パスに対応してどのコントローラのアクションを動かすかを設定するもの

get 'tweets' => 'tweets#index'

'tweets’ → パス
tweets → コントローラー
#index → アクション(コントローラーで定義)

コントローラ

rails g controller コントローラ名でファイルの生成
rails g controller tweetsで以下が作成される
create app/controllers/tweets_controller.rb

アクションとはコントローラに存在するインスタンスメソッド

def index ← アクション名

end

ビュー

ビューファイルはコントローラのメソッドひとつにつき、ひとつ存在する
/app/views/tweets/index.html.erbは
「tweets」コントローラの「index」アクションのビューファイルであることを示しています。
ビューファイルは「コントローラと同じ名前のフォルダ」内にある「アクション名と同じファイル名」のものが適用される。

テーブル

テーブルの横1行のことをレコード、縦1列のことをカラムという

必要なテーブルやアプリケーションが快適に動作するように取り出しやすいデータベース構造をあらかじめ設計しておくことが必要です。
これは近年のソフトウェア開発での主流の考え方で、 DOA という。

データベース設計の手順

1.テーブルの定義
例えばこれから作成するpictweetでは、つぶやきには「タイトル」「画像」「内容」のデータを保持する設計になっています。したがって、それぞれをtweetsテーブルのtitleカラム・imageカラム・textカラムと定義します。
もし1つのテーブルに同じカラム名を複数作るようなテーブル構造になりそうになったら、必ず違うテーブルに保存するようにしましょう。

2.ER図は、以下のように IE表記法 という書き方で書きます。

rails c

rails c とは「rails console」(コンソール)の略です。コンソールを実行すると作成したRailsアプリケーションのメソッドやクラスなどを実際に呼び出すことができる。
自分が実行するコマンドはターミナルで実行するものなのか、コンソールで実行するものなのかをよく確認すること。

モデルの作成

モデルとは、Railsの中でデータベースへのアクセスをはじめとする情報のやりとりに関する処理を担当しているパートで、実体は1つのクラスが定義された◯◯.rbというファイルです。
基本的に、モデルはapp/models以下の階層に設置されます。

rails g modelコマンドを使用すると、DBにテーブルを作成するためのファイルとそのテーブルに対応するモデルファイルとを自動で作成することができます。

$ rails g model tweet
この時マイグレーションファイルが作成されています。
例:db/migrate/201XXXXXXXXXXXXX_create_tweets.rb

モデル名、ファイル名、テーブル名

種類 モデルクラス名 モデルクラスのファイル名 テーブル名
概要 先頭は大文字、単数形 先頭は小文字、単数形 先頭は小文字、複数形
名前例 Tweet tweet.rb tweets

マイグレーションファイルに書くカラムの型

integer string text boolean datetime
説明 数字 文字(少なめ) 文字(多め) 真か偽か 日付と時刻
用例 ユーザーのidなど ユーザー名、パスワードなど 投稿文など 真偽フラグ 作成日時、更新日時など

テーブルの作成

class CreateTweets < ActiveRecord::Migration
  def change
    create_table :tweets(テーブル名) do |t|
      t.string(型)      :name(:カラム名)
      t.text(型)        :text(:カラム名)
      t.text(型)        :image(:カラム名)
      t.timestamps
    end
  end
end

rake db:migrateでマイグレーションファイルを実行

テーブルの操作

構造にはカラム名が縦に並んでいる
挿入にはデータを追加できる

rails g modelコマンドで生成されるモデルクラスは全てActiveRecord::Baseというクラスを継承しています。

class Tweet < ActiveRecord::Base

end


ActiveRecord(アクティブレコード)はRubyのGemの一種です。このGemはモデルとテーブルをつなぎ合わせることで、Railsからテーブルのレコードにアクセスできるようにします。ActiveRecordはRailsにデフォルトでインストールされています。実際に、この機能を利用する際にはActiveRecord::Baseというクラスを継承して使用します。

Tweetクラスはモデルクラスですが、このクラスがデータベースにアクセスすることができるのは、ActiveRecord::Baseを継承しているからなのです。

ActiveRecord::Baseというクラスにはテーブルにアクセスして情報を取得するためのメソッドが定義されており、モデルクラスはそれを継承し利用することでテーブルから情報を取得している

[1] pry(main)> Tweet.create(name: "takashi", text: "Nice to meet you!")

createメソッドはレコードの作成を行うことのできるメソッドです。newメソッドとsaveメソッドを使用して行った処理をcreateメソッドで一気に行うことができる

モデルを利用してデータを表示する

app/controlers/tweets_controller.rb

  def index
    @tweet(インスタンス変数) = Tweet(モデルクラス名).find(3)(メソッド)
  end

app/views/tweets/index.html.erb

<div class="contents row" >
  <% @tweets.each do |tweet| %>
    <p><%= tweet.text %></p>
  <% end %>
</div>

コントローラーでモデルクラスを使用してインスタンス変数を生成→
そのインスタンス変数をビューで使用する