首页 > 解决方案 > 通过 Select2 在 Rails 表单中使用标签和 Ajax

问题描述

我有一个 Select2 字段,它使用 AJAX 调用收集平台上的用户:

 <%= f.input :recipient_id, [], {}, {multiple: true, size: 10, id: 'select-guest', class: 'selectpicker',placeholder: true, required: true} %>

这很好用。但是我想让用户添加一个电子邮件地址,以防他/她希望联系的用户不在我的数据库中(然后控制器将检查数组元素是否包含 @ 用于电子邮件,或字符串用于 UUID)。建议我改用标签,我目前所处的位置:

<%= f.input :recipient_id, input_html: {class: 'multiple-input', multiple: "multiple"}, collection: User.all, label: false %>

使用以下JS

   $(document).ready(function () {
        $('#message_recipient_id').each(function () {
            $(this).select2({
                tags: true,
                tokenSeparators: [','],
                theme: 'bootstrap',
                placeholder: '<%= t :Separated_by_comma %>'
            });
        });
    });

显示效果很好。问题是:

如何使用当前的 AJAX 调用加载数据,而不是使用 User.all 加载所有用户?

此外,您可以看到用户名和名字没有显示(这是正常的)。

我的 Ajax 调用当前看起来像:

jQuery(document).ready(function () {
    $("#select-guest").select2({
        ajax: {
            url: "/hk/invitations/search_invitation.json", //URL for searching companies
            dataType: "json",
            delay: 200,
            data: function (params) {
                return {
                    search: params.term, //params send to companies controller
                };
            },
            processResults: function (data) {
                return {
                    results: data
                };
            },
            cache: true
        },
        allowClear: true,
        minimumInputLength: 2,
        maximumSelectionLength: 3,
        placeholder: "..."
    });
});

json文件是:

  json.array! @people_and_list do |people_and_list|
    json.id people_and_list.id
    json.text people_and_list.full_name
  end

变量@people_and_list为:

@people_and_list = User.where.not(profile: "1").ransack(first_name_or_last_name_cont: params[:search].to_s).result

当前选择标签字段

标签: ruby-on-railsjquery-select2

解决方案


推荐阅读