新手问题 Rails 中 multiple select 选择框的参数传递问题 [已解决]

sixther · April 17, 2016 · Last by raecoo replied at April 17, 2016 · 3018 hits

各位好,如图,目前可以将右边的值移动到左边,然后如何将值传到 controller 中有点问题,默认的 select 在提交表单的时候只会讲选中的值提交过去,但现在这个需求,就需要左边这个选择框不管怎么选,都是把所有的值提交过去才好用,这个要怎么实现,跪求好思路。 目前的 view 代码如下:

<%= f.select(:group_ids, options_from_collection_for_select(@host.groups, "id", "groupname") , {include_hidden: false}, {:class => 'form-control',:multiple => true}) %>

"你需要把所有值都传到后台"这个需求有点怪,多半是哪里设计不合理。

若真要这样的话,你这个 select 只是起展示作用(其实此时换成 textare 也并无不可,参考http://sbfaulkner.github.io/jquery.token-field/demo.html),借助 hidden_field 可以把所有值都传过去,示例代码:

hidden_field_tag 'group_ids[]', value: 'group_id_1'
hidden_field_tag 'group_ids[]', value: 'group_id_3'
hidden_field_tag 'group_ids[]', value: 'group_id_2'

这么说你这个值就不应该传,直接存在 db 里面,设计有问题

我觉得用 js 来处理更好一点。

#3 楼 @killernova 我的想法是在提交表单的时候用 js 将所有的值都改为 selected,这样值就能传过去了。

@qinfanpeng @leiz_me 这应该是一个很普遍的需求,用来更新 many-to-many 的数据,右边是待选的选项,只要将选项移动到左边的选择框,就可以提交了,有很多系统都是这样搞的。

#5 楼 @sixther 需求是很普遍,但一般都是 checkbook,偶尔会有多选下拉框;你这种两个框的,说实话很少见,一般在政府阿,事业单位的系统里看到过。我冒昧地猜测你们的设计师,很传统。

#6 楼 @qinfanpeng 我就是设计师,我在尝试写一个运维平台,我是做运维的,这种用法在资产管理系统或者监控系统中都是很常见也很方便的。截两个图给你看看,这两个的实现方式都是 select。 这个是国产运维资产管理系统 jumpserver,可以往主机组里添加主机,这种做法就很方便。比如主机很多的时候,再提供一个搜索框 这个是开源监控系统 zabbix 的界面。

好吧,学习了。

#9 楼 @raecoo 👍,学习了,要的就是这个效果。 我目前是在提交表单的 submit 上增加事件:

function select_all() {
  $("#host_group_ids").children().each(function() { 
    $(this).attr("selected","selected")
    }
  );
};

#10 楼 @sixther 这个 jQuery library 有各种事件的钩子,随便你喜欢怎么加

You need to Sign in before reply, if you don't have an account, please Sign up first.