プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】ActiveRecordのメソッドまとめ(save、crea…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Ruby on Rails】ActiveRecordのメソッドまとめ(save、create等)、管理コマンド(rails xxx)、hirb

01.19

  • miyabisan2
  • コメントを書く

この記事は4分で読めます

new

オブジェクトを作成するだけなので保存もしたい場合はsaveも併用する必要がある。

用途

インスタンス変数に一時的に保存しておいてバリデーションチェックに通過したら保存する。通過しなかったら登録画面に戻すというような用途で使うのが一般的です。

1
@user = User.new

実行例

まだ、この時点では空の仮のレコードができただけです。

モデルクラスのレコードに対して、データを設定する。

構文

1
モデルクラスの変数名.カラム名=値

実行例

create

new + saveをします。つまりオブジェクトを作成してそのままDBに保存するのですぐにレコードが作成されます。クラスメソッド です。戻り値は保存に成功しても失敗してもモデルオブジェクトを返すので、new + saveのようにバリデーションに成功したら保存、失敗したら保存しないという分岐処理を実装することはできないので注意です。

用途

実務ではあまり使うことがないのかもしれません。Railsコンソール上やseedとかでで手早くデータを作成したい場合とかに使う機会が多いような気がします。

save

DBにデータを保存します。インスタンスメソッドです。成功した場合は「true」、失敗した場合は「false」が返る。

  • どちらもバリデーション処理を実行します。
  • 「モデルオブジェクト.errors」を通じて検証エラー内容にアクセスすることができます。

errors

「ActiveModel::Errors」というクラスです。

モデルオブジェクト.errors.full_message

検証エラーメッセージ内容が格納されています。

構文

下記の構文を使用すれば、テーブルにデータを登録することができます。

1
モデルクラスの変数名.save

実行例

用途

  • DBに保存した場合に分岐処理を行た場合に使う。
  • バリデーションエラーがあり得る場合はこちらを使う。

データを設定しただけではまだ、レコード自体がテーブルに格納されていません。

登録結果の確認

登録したidで検索すると、登録した内容が確認できます。

save!

・失敗した場合は「ActiveRecord::RecordInvalid」を発生させることができ、rescueで救うことができる。(ただ、基本的にRailsが自動でrescueを行ってくれて開発者自身はrescueを書かないことが推奨されているため使うケースは非常に少ないです。)

用途

  • 例外をトリガーにロールバックをさせる場合に使う。(主な場面としてはTransactionメソッドにより大量データ登録処理とかを行う場合)

レコード抽出系メソッド

テーブルに格納されたデータを全て取り出す。

下記の構文を使います。

1
モデルクラス名.all

実行例

IDを指定してレコードを取り出す。

下記の構文を使います。

1
モデルクラス名.find(該当レコードのid)

実行例

モデルクラスには、ID列は、必須で作成されているので、「User.all」コマンドで確認して、そのIDを元に「User.find」コマンドを実行すれば確認することができます。

レコード更新系メソッド

流れとしては、登録とそれほど違いはありません。

update

変更内容を引数で指定して更新を行う、saveやsave!メソッドを更新用に便利にしたものです。登録時は検証を行う。

update!

変更内容を引数で指定して更新を行う、saveやsave!メソッドを更新用に便利にしたものです。登録時は検証を行う。

update_attributes

変更内容を引数で指定して更新を行う、saveやsave!メソッドを更新用に便利にしたものです。登録時は検証を行う。

update_attributes!

変更内容を引数で指定して更新を行う、saveやsave!メソッドを更新用に便利にしたものです。登録時は検証を行う。

update_attribute

1つの属性の変更を行うが登録時に検証を行わない。

update_column

変更内容を引数で指定して更新を行うが、検証やコールバックは行わない。更新SQLを直接実行する。

update_columns

変更内容を引数で指定して更新を行うが、検証やコールバックは行わない。更新SQLを直接実行する。

update_all

更新SQLを実行する。検証やコールバックは行わない。

直接更新:変数へ登録したレコードを格納

1
変数名 = モデルクラス名.find(該当のID)

実行結果

レコード内容を更新する。

保存及び、確認

削除系メソッド

変数に値を格納

レコードを削除、確認

レコードの削除には、「destroyメソッド」を使います。

管理系コマンド

rails -v

インストールされているRailsのバージョンを確認する。

rails s

作成したRailsアプリを起動する。デフォルトは開発(development)が起動するようになっています。

rails s -e (test/production)

テスト環境や本番環境を起動する。

rails routes

Railsのルーティング情報を出力する。

rails c

irbが起動してRailsのコードを対話的に試すことが可能。

rails c -s

irbが起動してRailsのコードを対話的に試すことが可能です。なお、DBをいじっても終了するときに自動でロールバックしてくれるのでテスト的にコードを動かしたい際に非常に便利なオプションです。

ソース自動生成系コマンド

rails new アプリ名

Railsアプリに必要なファイルを新規作成する。

rails _X.X.X(Railsのバージョン)_ new アプリ名

Railsのバージョンを指定してアプリを作成する。

rails new アプリ名 -d postgresql

postgresqlを使用してアプリを作成する。

rails g controller [コントローラー名] [アクション名](省略可能)

コントローラーを自動生成する。

rails g scaffold リソース名 カラム名1:データ型1 カラム名2:データ型2

テーブルデータを元にしてアプリの雛形を作成するコマンド

rails assets:precompile

Railsのプリコンパイルをするコマンド

DB系コマンド

rails g model モデル名 カラム名1:データ型1 カラム2:データ型2

空のモデルクラスおよび、マイグレーションファイルを作成する。このコマンドを実行しただけではテーブルは作成されない。

rails db:migrate

マイグレーション用コマンド、このコマンドでデータベースにテーブルが作成される。

rails dbconsole

「config/database.yml」で定義した接続情報に従って、Railsからデータベースに接続するためのコンソールに接続する。

rails:db:fixtures:load

fixtures(テストデータ)を開発用のDBに取り込む。

rails db:drop:all DISABLE_DATABASE_ENVIRONMENT_CHECK=1

作成済みのデータベースを全て削除する。

rails db:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1

現在のテーブルレイアウトでデータベースを再作成する。その後再度テストデータを挿入したい場合は「rails:db:fixtures:load」を実施しましょう。

削除系コマンド

rails destroy controller コントローラ名

コントローラ関連ファイルを削除する。

テーブルデータを見やすくするGemの「hirb」

インストール

1
2
3
4
# コンソール出力結果を表にする
gem 'hirb', '~> 0.7.3'
# コンソール文字列補正
gem 'hirb-unicode-steakknife', '~> 0.0.9'

hirbに加えて日本語対応させるために「hirb-unicode-steakknife」と言うGemも併せて追加すると良いでしょう。

設定

.irbrcと言うファイルをRailsアプリ直下に作成してRailsコンソール起動時に自動で読み込まれるようにします。(Hirb.enableはhirbを有効化するコマンドでRailsコンソール起動するたびに毎回やらないといけないのでスクリプトとして仕込みます。)

1
2
3
4
5
# コンソール起動時
if defined? Rails::Console
  # Hirb.enableの有効化
  Hirb.enable if defined? Hirb
end

実行

Railsコンソール上でHirbを実行してみます。

有効確認

いかがtrueが返ってきたらHirbが有効になっています。

1
Hirb::View.enabled?

二次元配列を表にする。

1
puts Hirb::Helpers::Table.render [[3,2], [2,3]]

ハッシュを表にする。

1
puts Hirb::Helpers::Table.render [{:age=>10, :name=>"太郎"}, {:age=>80, :name=>"次郎"}]

スポンサーリンク
  • 2020 01.19
  • miyabisan2
  • コメントを書く
  • Ruby on Rails
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2020 11.17

    【Ruby on Rails】「主キー」、「複合キー」、「composite_primary_keys」について

  2. 2020 12.19

    【Ruby on Rails】モデルの基本、データ型、scope、メソッド(クラス、インスタンス)の違い、委譲

  3. 2019 11.24

    【セキュリティ】CSRF(クロスサイトリクエストフォージェリ)とは?

  4. 2018 04.01

    【Webセキュリティ】XSS(クロスサイトスクリプティング)対策の基本(JavaやRails、breakmanなど)

  5. 2020 07.18

    【Ruby on Rails】環境変数に関する知識、direnv

  6. 2018 05.04

    【Webセキュリティ】ハッシュ関数(digest)、実装方法、パスワード運用について

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Docker】MySQLのコンテナに接続して基本操作…

【AWS】「Route53」、設定手順、ゾーンの種類

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー