2012-10-13 49 views
2

我知道可能有1或2个类似的问题,但他们都没有帮助我理解我在下面的错误。 我有以下HAML形式在我看来:rails form_tag with checkboxes

= 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的新手,所以我非常感谢您的帮助。感谢您的提前!

回答

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,因为从现在开始,它们没有一个来自数据库(它与中的"rating_#{index}" ID声明相匹配)。

+0

首先,感谢您的时间。所以我按照您的说法编辑了上面的内容(我只跳过了点击复选框文本的功能),但它仍然无法正常工作。它说未定义的方法对于数组 – Controller

+0

在你的倒数第二行:'@movies = Movie.where('... –

+0

我设法使它以不同的方式工作,但1为您的帮助(当我达到代表15:D) – Controller