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

Rails check_box_tag - get all the values checked in view(haml) file

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

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

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

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

日志:

Processing by SomeController#create as HTML Parameters: {"utf8"=>"✓", "names"=>["ron", "jacob"], "commit"=>"NameButton"}

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

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

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

Rails 版本 - 3.2.17

您可以使用 Javascript 来做到这一点。 确切的实现取决于 what 你想用这些值做什么,但是你可以,例如,使用 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);
    }
  });

});

更新了补充答案:

要使用 link 而不是按钮提交表单:

在您看来,替换

%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() 非常适合这项工作.