これまでに作った機能について簡単にまとめていく。

今回は、

ラベル機能の作成

前提条件

何かのモデルのcrud機能があること

使用モデル

Taskモデル

カラム データ型
1 name string
2 content text

Labelモデル

カラム データ型
1 name string

TaskLabelsモデル(記事中で作成)

カラム データ型
1 task_id bigint
2 label_id bigint

TaskLabelsモデル(中間モデル)の作成

$ rails g model TaskLabels task:references label:references

アソシエーションの設定

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

ストロングパラメーターの追加

app/controllers/tasks_controller.rb

class TasksController < ApplicationController
  
  def task_params
    params.require(:task).permit(:name, :content , { label_ids: [] })
  end
 
end

label_idsにより複数のラベルのパラメータを受け取る

フォームの設定

app/views/tasks/_form.html.erb

<%= f.collection_check_boxes(:label_ids, Label.all, :id, :name) %>

チェックボックスでラベルを選択
以上で作成完了