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