私の外部記憶装置

ただの覚え書きです。ちょこちょこ見直して加筆・修正していますが、間違ってるかも😅

【Rails】クエリ:カラム名・テーブル名(関連付け)によるデータ取得


概要

  • モデルのオブジェクト.カラム名で、データの読み書きができる
    ⭐️boolean型のものには、?付きのエイリアスが定義されるので、基本的にこれを使う
    🚨データベースに保存するにはsaveメソッドが必要
  • モデルのオブジェクト.関連付けされたテーブル名で、「関連付けられたオブジェクト、又はそのRelation」を取得できる

🚨注意点

クエリの返り値としてのRelation < 【Rails】クエリの返り値とメソッド(ActiveRecord::Relation) 🚧作成中

書き方例

カラム名による読み書き

3 Active Recordのモデルを作成する < Active Record の基礎 - Railsガイド

book = Book.new
book.name = "Hoge Hoge"
puts book.name # "Hoge Hoge"

# boolean型の場合、基本的に?付きのエイリアスを使う
@blog.secret?

Railsのモデルでboolean型のものは、?付きのメソッドがデフォルトであるのですか?
rails/activerecord/lib/active_record/attribute_methods/query.rb at main · rails/rails
1.2 AttributeMethodsモジュール < Active Model の基礎 - Railsガイド

テーブル名によるデータ取得

【Rails】モデルの関連を活用してデータを取得しよう | FJORD BOOT CAMP(フィヨルドブートキャンプ)

# 関連付けを使った書き方(推奨)
@blog = current_user.blogs.find(params[:id])
# 上記を、関連付けを使わないで書いた場合
@blog = Blog.where(user_id: current_user.id).find(params[:id])

「関連付け」種類による返り値の違い

4.1.1.1 association < Active Record の関連付け - Railsガイド
4.2.1.1 association < Active Record の関連付け - Railsガイド
4.3.1.1 collection < Active Record の関連付け - Railsガイド
4.4.1.2 collection < Active Record の関連付け - Railsガイド

  • belongs_tohas_one 関連付け
    association メソッド:
    関連付けられたオブジェクトを返す
    関連付けられたオブジェクトがない場合はnilを返す
  • has_manyhas_and_belongs_to_many 関連付け
    collection メソッド:
    関連付けられたすべてのオブジェクトのRelationを返す
    関連付けられたオブジェクトがない場合は、空のRelationを1つ返す
# association メソッド
@author = @book.author
# collection メソッド
@books = @author.books

「関連付け」で使える、その他のメソッド

⭐️ 4 関連付けの詳細な参照 < Active Record の関連付け - Railsガイド

has_many :through関連付けで、中間テーブルを書かない方法

2.4 has_many :through関連付け < Active Record の関連付け - Railsガイド

以下のようにthrough: :sectionsを指定すると、中間テーブルを書かなくて良くなり、@document.paragraphsと書ける

class Document < ApplicationRecord
  has_many :sections
                        # ↓を指定する
  has_many :paragraphs, through: :sections
end

class Section < ApplicationRecord
  belongs_to :document
  has_many :paragraphs
end

class Paragraph < ApplicationRecord
  belongs_to :section
end