コントローラの役割

以下のControllerファイルで役割の内容をコメントアウトしているので 復習で載せておく。

boards_controller.rb

class BoardsController < ApplicationController
  def index
    # Boardの一覧画面では、全ての掲示板情報を一覧で表示したい。
    @boards = Board.all
  end

  def new
    # Boardの新規作成画面では、Boardの空インスタンスをViewに渡したい。
    @board = Board.new
  end

  def show
    # Boardの詳細画面では、URLパラメーターから取得したBoardのインスタンスが必要
    @board = Board.find(params[:id])
  end

  def edit
    # Boardの詳細画面では、URLパラメーターから取得したBoardのインスタンスが必要
    @board = Board.find(params[:id])
  end

  def create
    # POSTリクエストのボディからパラメーターを取得して、Boardのインスタンスを作成したい
    @board = Board.new(board_params)

    #ActiveRecordのsaveメソッドを実行して、結果によって処理を分岐させたい
    if @board.save
      # 処理が成功の場合、リダイレクトでshowアクションを実行させたい
      redirect_to @board, notice: '掲示板が作成されました。'
    else
      # 処理が失敗の場合、@boardの内容を踏まえてnewテンプレートを表示させたい
      render :new
    end
  end

  def update
    # 編集対象のBoardインスタンスが必要
    @board = Board.find(params[:id])

    # ActiveRecordのupdateメソッドを実行して、結果によって処理を分岐させたい
    if @board.update(board.params)
      # 処理が成功した場合、リダイレクトでshowアクションを実行させたい
      redirect_to @board, notice: 'Board was successfully updated.'
    else
      # 処理が失敗の場合、@boardの内容を踏まえてeditテンプレートを表示させたい
      render :edit
    end
  end

  def destroy
    # 削除対象のBoardインスタンスが必要
    @board = Board.find(params[:id])

    # ActiveRecordのdestroyメソッドを実行
    @board.destroy
    # 処理が完了した後はリダイレクトでindexアクションを実行させたい
    redirect_to boards_url, notice: 'Board was successfully destroyed.'
  end

  private

  # Boardのパラメータ取得用にストロングパラメータを使ってメソッドを定義
  def board_params
    params.require(:board).permit(:title, :body)
  end
end

バリデーションで文字の制限

post.rb

validates :body, length: { minimum: 5, maximum: 140 }
# これで5文字以上、140文字以下で字数制限をしている。

NOT NULL制約

• 新しくmigrationファイルを作成するやり方

rails generate migration ChangeColumnOnモデル名カラム名で作成

新規作成したmigrationファイル

def change
    change_column_null  :posts, :title, false
    change_column_null  :posts, :body, false
end

rails db:migrateで変更内容を反映する。

既存のmigrationファイルを直接編集するやり方

ここは分かるので省略。ざっくりいうと「null:false」の方法でやる。

ただしmigrationファイルを変更しただけではデータベースに変更は行われないので

rails db:migrate:resetを実行することを忘れない。