【发布时间】:2021-12-01 07:50:20
【问题描述】:
一个视频可以有多个类别。
video.rb
has_many :video_categories
has_many :categories, through: :video_categories
category.rb
has_many :video_categories
has_many :videos, through: :video_categories
我有一个简单的表单,允许用户选择他想要组合的类别以查找特定的视频。例如,有“python”类别和“高级”类别。如果他选择了这两个类别,它应该显示同时具有这两个类别的视频。
视频 A - 类别 [1,4,7](这是类别 ID)
视频 B - 类别 [1,2,7,9]
视频 C - 类别 [7,9]
如果用户选择类别 [1,7],则输出应该是视频 A 和 B。我返回的当前范围是具有类别 1 的所有视频、具有类别 7 的所有视频和具有两者的视频其中。
我只想要同时包含这两个视频的视频。我该怎么做?
当前范围:
video.rb
scope :for_categories, -> (category_ids) {
joins(:video_categories).where(
video_categories: { category_id: category_ids }
)
}
pages_controller.rb
def search
@results = Video.for_categories(params[:category_ids])
end
我的表格
<%= form_with url: "/search", method: :get do |form| %>
<%= form.collection_check_boxes(:category_ids, Category.all,
:id, :title, { prompt: 'None'}, { multiple: true} ) do |cat| %>
<label class="text-capitalize checkbox-inline mr-2">
<%= cat.check_box %>
<%= cat.label %>
</label>
<% end %>
<%= form.submit "Search" %>
<% end %>
【问题讨论】:
标签: sql ruby-on-rails activerecord