使用复选框过滤列表

我有一个电影列表以及他们的评级。 在我的页面顶部,我有一个表单,其中列出了显示每个可用评级(G,PG-13等)的复选框。 一旦用户点击复选框并点击提交,我只想显示所选的电影。

在我的索引方法中,我有一个名为@filtered_ratings的实例变量,用于从已检查的电影中收集密钥。 我的想法是使用find方法改变我的控制器中的@movies并将@filtered_ratings的键与电影列表相匹配。 但是,我认为我一直在做错,因为我无法让它发挥作用。 我尝试了几种方法,比如@movies=Movie.find(params[:id] = @filtered_ratings)但我知道这是不正确的。 有什么建议?

假设您的复选框表格如下:

 <%= form_tag method: (blah), url: (blah) do %> <%= check_box_tag 'ratings[]', "R" %> <%= check_box_tag 'ratings[]', "PG" %> <%= check_box_tag 'ratings[]', "PG-13" %> <%= submit_tag 'Submit' %> <% end %> 

你会得到params [:ratings] = [“R”,“PG”]如果说前两个盒子被检查了。 所以,在控制器中你可以做到

 Movie.where("rating IN (?)", params[:ratings]) 

。 这假定您的电影具有“评级”属性。