現在Ruby on Railsでタスク管理アプリを作成しています。
「タスク:ラベル=多:多」で関連付けを行い、タスク一覧でラベル検索を実装したいのですがうまく行きません。joinsやeager_loadを使用し、結合する必要があると思うのですが、多対多の場合どうすれば正常に動作するのでしょうか?
ビュー(tasks/index.html.erb)
<%= form_with url: { controller: 'tasks', action: 'index' }, method: :get, local: true do |f| %> <div class="d-flex justify-content-center"> <%= f.collection_check_boxes :label_ids, Label.all, :id, :name do |t| %> <% t.label { t.check_box + t.text } %> <% end %> </div> <%= f.submit "検索" %> <% end %>
コントローラー(tasks_controller.rb)
class TasksController < ApplicationController def index @tasks = Task.preload(:status, :priority).page(params[:page]).per(10) search_labels end def search_labels if params[:label_ids].present? label_id = params[:label_ids].reject(&:empty?) label_id.each do |a| @tasks = @tasks.joins(:label).where(label: { id: a }) end end end end
モデル(tasks.rb)
class Task < ApplicationRecord has_many :tasks_labels_relation has_many :labels, through: :tasks_labels_relation end
モデル(label.rb)
class Label < ApplicationRecord has_many :tasks_labels_relation has_many :tasks, through: :tasks_labels_relation end
モデル(tasks_labels_relation.rb)
class TasksLabelsRelation < ApplicationRecord belongs_to :task belongs_to :label end
教えていただければ幸いです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。