rails form_tag with checkboxes

时间:2012-10-13 17:51:45

标签: ruby-on-rails ruby forms

我知道可能有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的新手,所以我非常感谢你的帮助。提前谢谢!

1 个答案:

答案 0 :(得分: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}"中的check_box_tag id声明匹配)。