Rails check_box_tag - 获取在view(haml)文件中检查的所有值

时间:2015-11-04 22:14:30

标签: ruby-on-rails checkbox ruby-on-rails-3.2 haml

所以我的页面上有多个复选框。我收集所有这些,如下面的代码所示。我想在将数组传递给控制器​​之前访问数组的值

= check_box_tag "names[]", ob.name, false, class: 'cbx'

我可以使用旧代码传递它们

%fieldset.actions
  = form.submit "Upgrade", :class => 'button'

日志:

  

SomeController处理#create as HTML参数:   { “UTF8”=> “中✓”,   “names”=> [“ron”,“jacob”],“commit”=>“NameButton”}

确定。所以我想访问我的haml文件中的所有值。在提交表单之前有没有办法,我可以访问选中的复选框。

我想将名称[]作为参数传递给我的控制器。

=link_to script_name1, { :action => 'create', :names => 'dontknowhowtopassnames[]' }, :method => :post

Rails版本 - 3.2.17

1 个答案:

答案 0 :(得分:1)

你可以使用Javascript来做到这一点。 确切的实现取决于您想要对这些值做什么 ,但您可以使用change事件来跟踪和维护所有已检查值的数组:

/*
* should properly init this array if some of your checkboxes are already
* checked when the form is loaded
*/
var names = [];

$(document).ready(function() {

  $(document).on('change', '.cbx', function() {
    var name = $(this).val();
    var idx = names.indexOf(name);
    if ($(this).prop('checked') && idx === -1) {
      names.push(name);
    } else if (!($(this).prop('checked')) && idx >= 0) {
      names.splice(idx, 1);
    }
  });

});

更新了补充答案:

提交带有链接而非按钮的表单:

在您看来,请替换

%fieldset.actions
  = form.submit "Upgrade", :class => 'button'

= link_to "Submit", "#", :class => 'submit_link'

然后在您的Javascript中,在$(document).ready正文中添加以下内容:

$(document).on('click', 'a.submit_link', function(e) {
  $(this).closest('form').submit();
  e.preventDefault();
});

就是这样。您可以尝试自行序列化表单数据,同时表单submit()方法可以为您处理,从而使您的生活变得非常复杂。您可以自行序列化数据,并且它有时很有用,例如在处理AJAX时,但在您的情况下,默认的submit()非常适合这项工作。