これまでに作った機能について簡単にまとめていく。
今回は、
子モデルを持たないレコードの取得
前提条件
アソシエーションが設定されていること(今回はラベル機能を作成済み)
ラベル機能の詳細はこちら
使用モデル
Taskモデル
カラム | データ型 | |
---|---|---|
1 | name | string |
2 | content | text |
Labelモデル
カラム | データ型 | |
---|---|---|
1 | name | string |
TaskLabelsモデル
カラム | データ型 | |
---|---|---|
1 | task_id | bigint |
2 | label_id | bigint |
設定アソシエーション
app/models/task.rb
has_many :task_labels, dependent: :destroy has_many :labels, through: :task_labels
app/models/task_label.rb
belongs_to :task belongs_to :label
app/models/label.rb
has_many :task_labels, dependent: :destroy has_many :tasks, through: :task_labels
子モデルを持たないレコードの取得
変更前
@tasks = Task.all
変更後
@tasks = Task.left_joins(:labels).select("tasks.*").where("labels.id is null")
概要
TaskモデルとLabelモデルをLEFT JOIN(左外部結合)し、
その後、labelのidを持たないTaskのレコードを全て取得している。
以上で作成完了