我在HAML文档上有一些复选框,它会更改单击“刷新”按钮时显示的结果。这样可以正常工作,但是当页面重新加载时,检查的框都会再次被取消选中。
如何重新配置HAML以在页面视图中保持复选框选中状态?
= form_tag movies_path, :method => :get do
Include:
- @all_ratings.each do |rating|
= rating
= check_box_tag "ratings[#{rating}]", '1', true
= submit_tag 'Refresh'
我还指定默认选中复选框,但加载页面时不会检查它们...
答案 0 :(得分:5)
这将实现您的目标:
= form_tag movies_path, :method => :get do
Include:
- @all_ratings.each do |rating|
= rating
= check_box_tag "ratings[#{rating}]", rating, if params[:ratings]; params[:ratings].include?(rating) end
= submit_tag 'Refresh'
调用后params[:ratings]
实例仍然存在,因此您可以使用它来标记之前用户点击的框。
答案 1 :(得分:2)
超新星32非常接近。
唯一缺少的是基于您的最后一行“...指定默认情况下应选中复选框。”
您的代码应如下所示:
= check_box_tag“评分[#{rating}]”,1,如果参数[:rating]; params [:ratings] .include?(评级)else true end
只需在param不存在的时候(默认状态)包含ELSE语句。
答案 2 :(得分:0)
我认为复选框不代表您的业务数据的某些持久状态(否则这不适用),但它们实际上是一种“过滤器”或类似于暂时配置视图。
在这种情况下,您应该只向AJAX请求结果,而不是复选框。因此,您不必将它们存储在任何地方,因为它们不会消失。