2

我知道可能有 1 或 2 个类似的问题,但没有一个能帮助我理解我在下面的错误所在。在我看来,我有以下 haml 形式:

= form_tag movies_path,:id=>"ratings_form", :method => :get do
  Include: 
  -  @all_ratings.each_with_index do |rating, index|
  = rating
  = check_box_tag "ratings[]", rating, @selected_ratings.include?(rating), id:"ratings_#{rating}"

在我的控制器中:

def index
    sorting=params[:sorting_on_a_column]
    if sorting=='1'
       @sort='title'
       @movies=Movie.order('title')
    elsif sorting=='2'
       @sort='date'
       @movies=Movie.order('release_date')
    else
       @movies=Movie.all
    end
    @all_ratings=Movie.select(:rating).map(&:rating).uniq
    @selected_ratings = (params["ratings"].present? ? params["ratings"] : @all_ratings)
    @movies = @movies.where(":rating IN (?)", params["ratings"]) if params["ratings"].present? and params["ratings"].any?
     end

我在上面的目标是按标题或 release_date(它确实)对电影进行排序,并且只显示与选中的复选框相对应的电影。我是 Ruby 和 Rails 的新手,所以我非常感谢你的帮助。谢谢进步!

4

1 回答 1

3

有几点需要考虑:

1 - 有多少可能的评级?您正在@all_ratings根据另一个模型的数据库表中显示的内容进行分配。如果没有评级模型,并且完整的评级列表会随着时间的推移而增长,那么可能应该有。

2 - 您可以像这样设置您的复选框标签:

- @all_ratings.each_with_index do |rating, index|
  = label_tag "rating_#{rating}", rating
  = check_box_tag "ratings[]", rating, @selected_ratings.include?(rating), id: "rating_#{rating}"

这将为您提供一个字符串值数组,该数组params["ratings"]应按原样在您的代码中工作。

设置标签标签,以便当您单击文本时,它会选中相应的复选框。.each_with_index用于为每个评级提供一个唯一的 ID,因为到目前为止,它们还没有来自数据库的 ID(它与"rating_#{index}"id 中的声明匹配check_box_tag)。

于 2012-10-13T18:59:46.653 回答