レコードの基本操作
参考:
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 – 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
レコードの取得
参考:
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 でのテーブルマッピング | うなの日記
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
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
Copying attributes from an object to another using the “attributes” method – Stack Overflow
clone / dup
ActiveRecord
における clone
と dup
の動作の違い
clone
:浅いコピー (アトリビュートはハッシュで管理されているため、オリジナルと共有される)
dup
:deep_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
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