7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby on Rails でアプリケーションを制作する。

Last updated at Posted at 2020-08-24

Ruby on Rails でアプリケーションを新規作成する。

$ rails new アプリケーション名 -オプション名
  • データベースに MySQL を使用する場合は、オプション名に -d mysql と記述する。
    ※ デフォルトは SQLite を使用している。

データベースを作成する。

$ rails db:create

ルーティングを生成する。

config/routes.rb
Rails.application.routes.draw do
  [HTTPメソッド] '[URIパターン]', to: '[コントローラー名]#[アクション名]'

  root to: 'コントローラー名#アクション名'
    # ルートパス (get '/', to: '[コントローラー名]#[アクション名]') にリクエストする。

  resources :コントローラー名, only: [:アクション名]
    # "resources"メソッドを使用すると、指定したコントローラーの 7つのアクション (index,new,create,show,edit,update,destroy) のルーティングが設定される。
    # "only"オプションを使用すると、7つのアクション全てではなく、指定しただけのアクションのルーティングが設定される。
end
  • HTTPメソッドの種類

    • GET:ページを表示する時に使用する。
    • POST:フォームからデータを送信して、登録する時に使用する。
    • PUT:データを変更する時に使用する。
    • DELETE:データを削除する時に使用する。
  • アプリケーションのルーティングを確認する時はターミナルで $ rails routes を実行する。

  • Prefix

    • Prefix名_path と記述することで、リンク先等のパスとして扱える。

コントローラーを作成する。

$ rails g controller コントローラー名
  • ルーティングから送られたリクエストに対応する7つのアクション
    • index
    • new
    • create
    • show
    • edit
    • update
    • destroy

モデルを作成する。

$rails g model モデル名
  1. マイグレーションファイルにテーブルに必要なカラムを記述する。
マイグレーションファイル.rb
class CreatePosts < ActiveRecord::Migration[5.2]
  def change
    create_table :posts do |t|
      t. :カラム名, null: false
        # "null: false" は空のデータが登録できないようにする必須項目に付けるバリデーション (モデルファイルにも要記述)
      t.timestamps
    end
  end
end
  • 型の種類
    • integer:数値
    • string:文字列
    • text:文字列(長文)
    • boolean:選択肢
    • datetime:日付・時刻
  1. マイグレーションファイルに必要なカラムを記述したらマイグレーションをする。
$ rails db:migrate
  • もし、マイグレーションした後にマイグレーションファイルの修正をする場合には、$ rails db:rollback を実行して、データベースから差し戻す必要がある。
  • 現状 マイグレーションファイルがデータベースに適用されているか確認するには $ rails db:migrate:status を実行する。

データベースに一度 上げたテーブルの情報を追加・削除・変更するには…

  • $ rails g migration Addカラム名Toテーブル名 カラム名:型 という形で実行する。
    • Addカラム名Toテーブル名 の部分は、単語の頭文字を大文字にして、スペースを開けずに記述する。

ヘルパーメソッド

.html
<%= link_to 'リンクに表示する文字', 'リンク先のURL' %>

ビューファイルにデータベースのテーブルに保存されている値を表示する。

  1. コントローラーでモデルからテーブルの値を取得する。
_controller.rb
class PostsController < ApplicationController
  def アクション名
    @変数名 = " ● ● ● "
      # コントローラーでインスタンス変数を定義しておくと、ビューファイルで "<%= @変数名 %>" 呼び出すことができる。

    @変数名 = モデル名.ActiveRecordクラスメソッド
      # 取得したい値があるモデル名の ActiveRecord クラスメソッドを指定して、インスタンス変数に代入する。すると、ビューファイルで変数名を指定することで値を表示できる。
  end
end
  • ActiveRecord クラスメソッドの種類
    • all:テーブルの全てのデータを取得する。
    • find(●):テーブルの中の特定のレコードを取得する。
    • new:新しくレコードを生成する。
    • save:特定のレコードに保存する。
  1. 取得した値をビューファイルに記述する。
.html
<%= @変数名.カラム名 %>
  <!-- "find(●)" メソッドを指定して、特定のレコードを取得した場合は、代入した変数名に表示したいカラム名を記述する。 -->

<% @コントローラで代入したインスタンス変数名.each do |変数名| %>
  <%= 変数名.カラム名 %>
<% end %>
  <!-- "all" メソッドを指定して、複数のレコードを取得した場合は、Each文を利用してレコード 1つずつ取り出してから表示する。 -->

フォームを作成する。

ビューファイルにフォームを作成する。

.html
<%= form_with model: @コントローラでモデルに新しくレコードを生成する値を代入するインスタンス変数名, url: フォームを送信するコントローラの Createアクションの Prefix_path, local: true do |form| %> 
  <%= form.フォームのヘルパーメソッドの種類 :カラムの名前 %> 
<% end %>
  • " type="" " 属性の値の種類
    • type="text":テキストフォーム
    • type="password":パスワードフォーム
    • type="checkbox":チェックボックス
    • type="radio":ラジオボタン
    • type="submit":送信ボタン

ルーティングに送信ボタンを押した後のリクエスト先を記述する。

config/routes.rb
post '[URIパターン]', to: '[コントローラー名]#create'
  # フォームからデータを送信して 登録する操作をするので、HTTPメソッドに "POST"
  # データの投稿をするリクエストには、"Create" アクション

コントローラでテーブルにレコードを追加する。

_controller.rb
def create
  モデル名.create(ストロングパラメータのメソッド名)
    # モデルにレコードを追加する為の .create メソッド
    # フォームから値を受け取る為にストロングパラメータを使用する。
end

private
def ストロングパラメータのメソッド名
  params.require(:インスタンス変数名).permit(:フォームの "name" 属性の値)
    # フォームから送信されてきた値の中で、指定されたフォームを許可する。
end
7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?