Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 保持选中HAML中的复选框_Ruby On Rails_Haml - Fatal编程技术网

Ruby on rails 保持选中HAML中的复选框

Ruby on rails 保持选中HAML中的复选框,ruby-on-rails,haml,Ruby On Rails,Haml,我在HAML文档上有一些复选框,当我单击“刷新”按钮时,这些复选框应该会更改显示的结果。这可以正常工作,但是当页面重新加载时,选中的框再次被取消选中 如何重新配置HAML以在页面视图中保持复选框处于选中状态 = form_tag movies_path, :method => :get do Include: - @all_ratings.each do |rating| = rating = check_box_tag "ratings[#{rating}]",

我在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'

我还指定默认情况下应选中复选框,但在加载页面时不会选中这些复选框…

我认为这些复选框并不代表业务数据的某些持久状态,否则这将不适用,但它们实际上是一种过滤器或类似物,用于临时配置视图


在这种情况下,您应该只使用AJAX请求结果,而不是复选框。因此,您不必将它们存储在任何地方,因为它们不会消失。

这将实现您想要的:

    = 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]实例在调用后仍然存在,因此您可以使用它来标记用户之前单击的框。

supernova32非常接近

唯一缺少的是基于您的最后一行…指定默认情况下应选中复选框

您的代码应该如下所示:

=如果参数为[:ratings],则选中复选框标记ratings[{rating}],1;参数[:额定值]。包括?额定值否则为真结束


只需在参数不存在时包含ELSE语句作为默认状态。

我认为这可能非常复杂。您必须以某种方式保存请求之间复选框的状态。一种方法是使用AJAX在每次选中复选框时发送请求。然后,服务器可以将信息存储在会话中。另一种方法是将复选框信息存储在本地存储器中,但这只适用于现代浏览器。+1@Jesper我认为这是您建议的一个很好的解决方案,不太复杂。skeniver checkout在单击复选框时向控制器操作发送请求,并存储要在会话中选择的ID或任何复选框,并将其传递到您的视图中。您可以将复选框逻辑排除在视图之外,这将使事情变得更简单。例如,通过将一个新的class属性设置为params[:rating],然后将结果散列的值从1更改为true,您不需要其他解决方案中描述的复杂逻辑。