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

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

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

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

  • #1楼 @qinfanpeng 多谢大侠,已用jquery实现,但还有一个问题,请移步: https://ruby-china.org/topics/29746 移动函数:

    function test(from_select,to_select) {
      $('#' + from_select +' option:selected').each(function() {
          var newOption= new Option($(this).text(),$(this).val());
          $(this).remove();
          $("#" + to_select ).append(newOption);
        }
      );
    
  • #3楼 @qinfanpeng 搞定了:

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

    options_from_collection_for_select(@groups, "id", "groupname") 这个确实可以直接从model对象生成想要的数组,然后option里的include_hidden: false则可以去掉多出的一个“”

    http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_from_collection_for_select

    Note: The client either sends only the hidden field (representing the deselected multiple select box), or both fields. This means that the resulting array always contains a blank string.
    
    In case if you don't want the helper to generate this hidden field you can specify include_hidden: false option.
    

    更新的话,可以先试params获取到表单数据,然后update即可。

    def update
        @host=Host.find(params[:id])
        if @host.update(host_params)
            redirect_to @host
        else
            render 'edit'
        end
    end
    private
        def host_params
            params.require(:host).permit(:public_ip, :privite_ip, :server, group_ids: [])   #获取数组的方式需要特别对待
        end
    
  • #1楼 @qinfanpeng 😅,多谢哈 1,我查了下,:prompt是给select框显示一个提示符,而且还属于select中的一个元素。 2,我那种方法是可以直接保存关联关系到groups_hosts表中的。 然后我尝试给select传递的参数不是id,而是Group实例,如下:

    #controller
    @group_list=Group.all.collect { |g| Array.new << g.groupname << g }
    #view
     <%= f.select(:groups, @group_list, {}, {:class => 'form-control',:multiple => true}) %>
    

    但这这时候params[:host][:groups]获取到的却是String类型的,还是没法保存 😅

  • #12楼 @hww 😓,终于找到原因了

    class Host < ActiveRecord::Base
        has_many :comments
        belongs_to :group
    end
    

    我这里以前写的是 belongs_to :groups ,然后h.group.name的时候一直不出来东西。 原来belongs_to 后面的需要单数。😓 这块属于什么概念,怎么才能理解它呢。

    就是说rails创建model的时候都是以单数的形式去创建的,然后给建一个复数名字的数据表,然后维护表与表之间的关系也需要注意单复数,确实很贴切英语语法😓

  • #8楼 @linyunjiang 嗯,多谢,我也觉得view里写查询不好,可是这不是刚入门嘛,就先瞎试呢,看看都能干嘛。 多谢你的分享哈 。

  • #7楼 @riskgod 1#确实牛逼,说的这个方法我现在还没参透呢,😅