CRUD作成

概要

scaffoldを使わずにCRUDアプリを作成する。

Lesson1

事前知識

使用するgenerate コマンド

いつも忘れる「Railsのgenerateコマンド」の備忘録 - maeharinの日記

リンク先にgenerateコマンド別に生成されるファイルが記載されている。 scaffoldを使用しない場合はcontroller, modelを実行すればscaffoldと同じファイルが全て生成されたことになる。

rails generate controller
rails generate model

データベースから対象の投稿情報を取得する方法

class PostsController < ApplicationController
  before_action :set_post, only: [:show, :edit, :update, :destroy]

  private
    def set_post
      @post = Post.find(params[:id])
    end

各種処理の前に、set_postメソッドでデータベースから情報を取得している。

rails consoleでオブジェクトを作成する方法

パターン①
post = Post.new
post.title = 'title_01'
post.body = 'body_01'
post.save

パターン②
post = Post.new(title: 'title_01', body: 'body_01')
post.save

パターン③
Post.create(title: 'title_01', body: 'body_01')

記述量が少ないので、パターン③推奨 createメソッドはPostscontrollerのcreateメソッドに記載されている通り、Post.newとpost.saveの2つの処理をまとめたものであることがわかる。

データベースよりオブジェクトを取得する方法

Post.idが1のオブジェクトを取得する。

パターン①
Post.find(1)
パターン②
Post.find_by(id:1)
パターン③
Post.where(id:1)

find, find_by, whereのメソッドで取得できる。(現場Railsp.177にてその他のメソッドも解説されている)

◯find 取得件数:1 idによってオブジェクトを取得する。 データが見つからない場合は例外を返す 記述例)find(params[:id])

◯find_by 取得件数:1 条件を指定してオブジェクトを取得する データが見つからない場合はnilを返す 記述例) find_by(params[:id]), find_by(title: 'title_01')

◯where 取得件数:複数 条件を指定して、条件に適合するオブジェクトを全て取得する find_byと組み合わせることもできる 記述例)User.where(admin: true).find_by(name: '田中')

Lesson1 ワークフロー

環境構築

rails _5.2.4.4_ new crud_kadai
rails generate controller posts index show new edit update 
rails generate model Post title:string body:text
rails db:migrate

注意) rails generate controllerでは記述したアクションに対応したviewsファイルも作成されるため、create, destroyは記述しない方が良い。

新規作成機能