レコードの基本操作

参考:

Active レコードの基本 | Rails 日本語ドキュメント (Ruby STUDIO)

Active Record の基礎 | Rails ガイド [公式]

rails/activerecord: Active Record – Object-relational mapping in Rails – GitHub

ActiveRecord

参考:

ActiveRecord | Ruby on Rails API [Official]

ActiveRecord::Relation

参考:

ActiveRecord::Relation | Ruby on Rails API [Official]

使い方

参考:

Rails のモデルの作成、検索、更新、削除のよく使うメソッドのまとめ | Rails Webook

create

モデルオブジェクトを生成して保存する。データベースに保存せずに生成のみを行いたい場合は new メソッドを使用する。

createバリデーションが通過した場合にはレコードは保存される。保存できてもできなくても生成したオブジェクトを返す。

create!バリデーションが通過した場合にはレコードは保存される。保存できなかった場合には ActiveRecord::RecordInvalid エラーを発生させる。保存された場合はオブジェクトを返す。

参考:

create – ActiveRecord::Persistence::ClassMethods | Ruby on Rails API [Official]

create! – ActiveRecord::Persistence::ClassMethods | Ruby on Rails API [Official]

create – ActiveRecord::Relation | Ruby on Rails API [Official]

create! – ActiveRecord::Relation | Ruby on Rails API [Official]

create | Railsドキュメント (railsdoc.com)

save! create! update! のバリデーション例外を捕捉する – Qiita

save / save!

モデルオブジェクトをデータベースに保存する。

save保存できない場合に false を返す。

save!保存できない場合に ActiveRecord::RecordNotSaved エラーを発生させる。

参考:

save | Rails ドキュメント (railsdoc.com)

save と save! について | ゆっくりブログ

save – ActiveRecord::Persistence | Ruby on Rails API [Official]

save! – ActiveRecord::Persistence | Ruby on Rails API [Official]

レコードの更新

参考:

Active Record の attributes の更新メソッド | 酒と涙とRubyとRailsと

ActiveRecord の attribute 更新方法まとめ – Qiita

update – ActiveRecord::Persistence | Ruby on Rails API [Official]

update! – ActiveRecord::Persistence | Ruby on Rails API [Official]

touch

レコードの更新日時 (updated_at) を更新する。

参考:

Rails でモデルの update_at のみを更新したい場合 – Qiita

Rails で updated_at のみ更新したい場合 | hello-world.jp.net

touch – ActiveRecord::Persistence | Ruby on Rails API [Official]

Rails 5 allows updating a record without updating timestamps | BigBinary Blog

touch – rails/persistence.rb at v5.2.3 · rails/rails – GitHub

_touch_row – rails/persistence.rb at v5.2.3 · rails/rails – GitHub

current_time_from_proper_timezone – rails/timestamp.rb at v5.2.3 · rails/rails – GitHub

In Rails’ ActiveRecord, what is touch for? – Stack Overflow

レコードの削除 (destroy / delete)

id を指定してレコードを削除する。配列で複数の id を指定できる。

User.destroy([1, 2, 3])

destroyコールバックが呼ばれる。関連付けの dependent に従って関連モデルが処理される。

deleteコールバックは呼ばれない。関連付けの dependent は無視される。

参考:

destroy – ActiveRecord::Persistence::ClassMethods | Ruby on Rails API [Official]

delete – ActiveRecord::Persistence::ClassMethods | Ruby on Rails API [Official]

Strong Parameters

参考:

パラメータから create するときにはまったところメモ – Qiita

関連するレコードの保存

参考:

Rails で関連するデータ (親子関係) を保存する方法あれこれ – Qiita

レコードの取得

参考:

レコードの取得方法まとめ – Qiita

find

参考:

find – ActiveRecord::FinderMethods | Ruby on Rails API [Official]

How to prevent duplicates – Stack Overflow

find_or_create_by

参考:

find_or_create_by – ActiveRecord::Relation | Ruby on Rails API [Official]

find_or_create_by! – ActiveRecord::Relation | Ruby on Rails API [Official]

find_or_initialize_by – ActiveRecord::Relation | Ruby on Rails API [Official]

Rails の find_or_create_by の block は create した際にしか実行されない – Qiita

find_or_create_by | Railsドキュメント (railsdoc.com)

find_or_create_by (ActiveRecord::Relation) | APIdock

find_or_create_by! (ActiveRecord::Relation) | APIdock

find_or_create_by におけるロック

参考:

ActiveRecord の find_or_create_by を確実に実行するには – Qiita

initialize / after_initialize

参考:

ActiveRecord の initialize 飛ばし – Qiita

after_initialize の使いドコロがわからない | TechRacho

after_initialize と after_find | Rails ガイド [公式]

これは ActiveModel の after_initialize ということでしょうか? – teratail

Don’t override initialize on ActiveRecord objects | Dale’s Blog

persisted?

データベースに永続化されたレコードである場合に true を返す。

参考:

persisted? – ActiveRecord::Persistence | Ruby on Rails API [Official]

assign_attributes / attributes=

レコードを保存せずに値を割り当てる。

参考:

assign_attributes – ActiveModel::AttributeAssignment | Ruby on Rails API [Official]

table_name / table_name=

参考:

activerecord で self.table_name の値と、定義した model の relationship が被っちゃった時の悲劇 – Qiita

Rails で規約に従わないテーブル名を使う | ゆと Rubyist 日記

ActiveRecord でテーブル名取得 | Freak (ysmt.blog21.fc2.com)

ActiveRecord でテーブルの情報を取得する方法 | present (tnakamura.hatenablog.com)

ActiveRecord でのテーブルマッピング | うなの日記

命名ルール | Rails ガイド [公式]

命名ルールを上書きする| Rails ガイド [公式]

table_name – ActiveRecord::ModelSchema::ClassMethods | Ruby on Rails API [Official]

table_name= – ActiveRecord::ModelSchema::ClassMethods | Ruby on Rails API [Official]

How do I explicitly specify a Model’s table-name mapping in Rails? – Stack Overflow

primary_key / primary_key=

参考:

Rails のルーティングで id (主キー) を変更する – Qiita

Rails4 db:migrate で id 以外のカラムにプライマリキーの設定を行う | PAYFORWARD

命名ルールを上書きする| Rails ガイド [公式]

primary_key – ActiveRecord::AttributeMethods::PrimaryKey::ClassMethods | Ruby on Rails API [Official]

primary_key= – ActiveRecord::AttributeMethods::PrimaryKey::ClassMethods | Ruby on Rails API [Official]

ActiveRecord model without primary key – Stack Overflow

increment / increment!

参考:

increment – ActiveRecord::Persistence | Ruby on Rails API [Official]

increment! – ActiveRecord::Persistence | Ruby on Rails API [Official]

decrement / decrement!

参考:

decrement – ActiveRecord::Persistence | Ruby on Rails API [Official]

decrement! – ActiveRecord::Persistence | Ruby on Rails API [Official]

ロック

参考:

Rails のテストで悲観的ロックを再現する方法 翻訳 | palindrome!

ActiveRecord::Locking::Pessimistic | Ruby on Rails API [Official]

attribute / define_attribute

参考:

attribute – ActiveRecord::Attributes::ClassMethods | Ruby on Rails API [Official]

define_attribute – ActiveRecord::Attributes::ClassMethods | Ruby on Rails API [Official]

composed_of

参考:

composed_of – ActiveRecord::Aggregations::ClassMethods | Ruby on Rails API [Official]

レコードを複製する

参考:

Copy object Attributes to another object in Ruby | Snipplr Social Snippet Repository

What is the easiest way to duplicate an activerecord record? – Stack Overflow

how to make an empty ActiveRecord::Relation object and copy a record from another ActiveRecord::Relation object (full)? – Stack Overflow

Copying attributes from an object to another using the “attributes” method – Stack Overflow

clone / dup

ActiveRecord における clonedup の動作の違い

clone浅いコピー (アトリビュートはハッシュで管理されているため、オリジナルと共有される)

dupdeep_dup による深いコピーが行われ、primary_key の値はリセットされる。

参考:

Rails でのオブジェクトのコピー | 株式会社ランチェスター

ActiveRecord オブジェクトをコピーする | hello-world.jp.net

Ruby の clone と dup と ActiveRecord の clone と dup は別物? – スタック・オーバーフロー

Ruby on rails dup vs clone | Jeroen van Baarsen

Diving into Ruby’s #dup and #clone | AppSignal Blog

#clone vs #dup | Raycent Tan

initialize_dup – rails/core.rb at v5.2.3 · rails/rails – GitHub

What is the easiest way to duplicate an activerecord record? – Stack Overflow

ApplicationRecord

エンジン内でモデルのベースとなる ApplicationRecord クラスにモジュールをミックスインしてもアプリケーション全体の ActiveRecord::Base に影響しない。

データベースと連携したクラスではない抽象クラスであることを示すフラグを設定する。

module MyEngine
  class ApplicationRecord < ActiveRecord::Base
    self.abstract_class = true
  end
end

参考:

ApplicationRecord in Rails 5 | BigBinary Blog

ActiveRecord::Inheritance::ClassMethods | Ruby on Rails API [Official]

PG::UndefinedTable: ERROR: relation “application_records” does not exist – Stack Overflow

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA