【发布时间】:2018-11-27 21:50:13
【问题描述】:
我有一个带有电影和类别的 Rails 5.2.1 应用程序。它们通过连接表的has_and_belongs_to_many 关系相互连接。
尝试执行以下操作:在电影的 index 页面上,我想过滤通过选中类别复选框显示的电影集合。我可以正确显示类别的复选框,但我很难获得有关哪些复选框被选中到参数中的信息。
/ rails_app/app/views/movies/index.html.slim
h1 Listing movies
= collection_check_boxes(@movies, :category_ids, Category.all, :id, :name) do |box|
= box.check_box
= box.label
= link_to 'Filter movies on category', params.permit!.merge(filter: :category_ids)
table
/ table with movies that will be filtered
这些:category_ids 似乎是错误的。是否有可能以这种方式获得复选框结果(用于进一步过滤查询字符串参数)?我错过了什么吗,例如在我的控制器中?
# rails_app/app/controllers/movies_controller.rb
class MoviesController < ApplicationController
def index
@movies = Movie.all
end
...
def movie_params
params.require(:movie).permit(:name, :rating, category_ids: [])
end
end
以上是一个示例应用程序,由一些脚手架和一些编辑生成:
rails generate scaffold category name:stringrails generate scaffold movie name:string rating:integerrails generate migration CreateJoinTableMoviesCategories movie categorybin/rails db:migrate RAILS_ENV=development
-> 将has_and_belongs_to_many :movies 添加到类别类
-> 将has_and_belongs_to_many :categories 添加到电影类
-> 将category_ids: [] 添加到电影类中的movie_params
【问题讨论】:
-
试试
params.require(:movie).permit(:name, :rating, :category_ids => [])